Fixed bug with globals deinitialization
This commit is contained in:
+10
-8
@@ -360,13 +360,15 @@ internal class CodeGeneratorVisitor(val context: Context, val lifetimes: Map<IrE
|
|||||||
}
|
}
|
||||||
|
|
||||||
appendingTo(bbInit) {
|
appendingTo(bbInit) {
|
||||||
context.llvm.fileInitializers.forEach {
|
context.llvm.fileInitializers
|
||||||
val irField = it as IrField
|
.map { it as IrField }
|
||||||
val descriptor = irField.descriptor
|
.filterNot { it.initializer is IrConst<*> }
|
||||||
val initialization = evaluateExpression(irField.initializer!!.expression)
|
.forEach {
|
||||||
val globalPtr = context.llvmDeclarations.forStaticField(descriptor).storage
|
val descriptor = it.descriptor
|
||||||
storeAnyGlobal(initialization, globalPtr)
|
val initialization = evaluateExpression(it.initializer!!.expression)
|
||||||
}
|
val globalPtr = context.llvmDeclarations.forStaticField(descriptor).storage
|
||||||
|
storeAnyGlobal(initialization, globalPtr)
|
||||||
|
}
|
||||||
ret(null)
|
ret(null)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -668,8 +670,8 @@ internal class CodeGeneratorVisitor(val context: Context, val lifetimes: Map<IrE
|
|||||||
LLVMSetInitializer(globalProperty, evaluateExpression(declaration.initializer!!.expression))
|
LLVMSetInitializer(globalProperty, evaluateExpression(declaration.initializer!!.expression))
|
||||||
} else {
|
} else {
|
||||||
LLVMSetInitializer(globalProperty, LLVMConstNull(type))
|
LLVMSetInitializer(globalProperty, LLVMConstNull(type))
|
||||||
context.llvm.fileInitializers.add(declaration)
|
|
||||||
}
|
}
|
||||||
|
context.llvm.fileInitializers.add(declaration)
|
||||||
|
|
||||||
LLVMSetLinkage(globalProperty, LLVMLinkage.LLVMInternalLinkage)
|
LLVMSetLinkage(globalProperty, LLVMLinkage.LLVMInternalLinkage)
|
||||||
// (Cannot do this before the global is initialized).
|
// (Cannot do this before the global is initialized).
|
||||||
|
|||||||
Reference in New Issue
Block a user