[K/N] Disable debug info for old-style global initializers
This commit is contained in:
+11
-18
@@ -474,7 +474,7 @@ internal class CodeGeneratorVisitor(val context: Context, val lifetimes: Map<IrE
|
|||||||
)
|
)
|
||||||
LLVMSetLinkage(initFunction, LLVMLinkage.LLVMPrivateLinkage)
|
LLVMSetLinkage(initFunction, LLVMLinkage.LLVMPrivateLinkage)
|
||||||
generateFunction(codegen, initFunction) {
|
generateFunction(codegen, initFunction) {
|
||||||
using(FunctionScope(initFunction, "init_body", it)) {
|
using(FunctionScope(initFunction, it)) {
|
||||||
val bbInit = basicBlock("init", null)
|
val bbInit = basicBlock("init", null)
|
||||||
val bbLocalInit = basicBlock("local_init", null)
|
val bbLocalInit = basicBlock("local_init", null)
|
||||||
val bbLocalAlloc = basicBlock("local_alloc", null)
|
val bbLocalAlloc = basicBlock("local_alloc", null)
|
||||||
@@ -497,8 +497,6 @@ internal class CodeGeneratorVisitor(val context: Context, val lifetimes: Map<IrE
|
|||||||
.filterNot { it.storageKind == FieldStorageKind.THREAD_LOCAL }
|
.filterNot { it.storageKind == FieldStorageKind.THREAD_LOCAL }
|
||||||
.forEach { initGlobalField(it) }
|
.forEach { initGlobalField(it) }
|
||||||
context.llvm.initializersGenerationState.moduleGlobalInitializers.forEach {
|
context.llvm.initializersGenerationState.moduleGlobalInitializers.forEach {
|
||||||
if (context.shouldContainLocationDebugInfo())
|
|
||||||
debugLocation(it.startLocation!!, it.endLocation)
|
|
||||||
evaluateSimpleFunctionCall(it, emptyList(), Lifetime.IRRELEVANT)
|
evaluateSimpleFunctionCall(it, emptyList(), Lifetime.IRRELEVANT)
|
||||||
}
|
}
|
||||||
ret(null)
|
ret(null)
|
||||||
@@ -515,8 +513,6 @@ internal class CodeGeneratorVisitor(val context: Context, val lifetimes: Map<IrE
|
|||||||
.filter { it.storageKind == FieldStorageKind.THREAD_LOCAL }
|
.filter { it.storageKind == FieldStorageKind.THREAD_LOCAL }
|
||||||
.forEach { initThreadLocalField(it) }
|
.forEach { initThreadLocalField(it) }
|
||||||
context.llvm.initializersGenerationState.moduleThreadLocalInitializers.forEach {
|
context.llvm.initializersGenerationState.moduleThreadLocalInitializers.forEach {
|
||||||
if (context.shouldContainLocationDebugInfo())
|
|
||||||
debugLocation(it.startLocation!!, it.endLocation)
|
|
||||||
evaluateSimpleFunctionCall(it, emptyList(), Lifetime.IRRELEVANT)
|
evaluateSimpleFunctionCall(it, emptyList(), Lifetime.IRRELEVANT)
|
||||||
}
|
}
|
||||||
ret(null)
|
ret(null)
|
||||||
@@ -710,23 +706,20 @@ internal class CodeGeneratorVisitor(val context: Context, val lifetimes: Map<IrE
|
|||||||
/**
|
/**
|
||||||
* The [CodeContext] enclosing the entire function body.
|
* The [CodeContext] enclosing the entire function body.
|
||||||
*/
|
*/
|
||||||
private inner class FunctionScope(val declaration: IrFunction?, val functionGenerationContext: FunctionGenerationContext) : InnerScopeImpl() {
|
private inner class FunctionScope private constructor(
|
||||||
|
val functionGenerationContext: FunctionGenerationContext,
|
||||||
|
val declaration: IrFunction?,
|
||||||
|
val llvmFunction: LLVMValueRef) : InnerScopeImpl() {
|
||||||
|
|
||||||
constructor(llvmFunction:LLVMValueRef, name:String, functionGenerationContext: FunctionGenerationContext):
|
constructor(declaration: IrFunction, functionGenerationContext: FunctionGenerationContext) :
|
||||||
this(null, functionGenerationContext) {
|
this(functionGenerationContext, declaration, codegen.llvmFunction(declaration))
|
||||||
this.llvmFunction = llvmFunction
|
|
||||||
this.name = name
|
|
||||||
}
|
|
||||||
|
|
||||||
var llvmFunction: LLVMValueRef? = declaration?.let{
|
constructor(llvmFunction: LLVMValueRef, functionGenerationContext: FunctionGenerationContext) :
|
||||||
codegen.llvmFunction(it)
|
this(functionGenerationContext, null, llvmFunction)
|
||||||
}
|
|
||||||
|
|
||||||
val coverageInstrumentation: LLVMCoverageInstrumentation? =
|
val coverageInstrumentation: LLVMCoverageInstrumentation? =
|
||||||
context.coverage.tryGetInstrumentation(declaration) { function, args -> functionGenerationContext.call(function, args) }
|
context.coverage.tryGetInstrumentation(declaration) { function, args -> functionGenerationContext.call(function, args) }
|
||||||
|
|
||||||
private var name:String? = declaration?.name?.asString()
|
|
||||||
|
|
||||||
override fun genReturn(target: IrSymbolOwner, value: LLVMValueRef?) {
|
override fun genReturn(target: IrSymbolOwner, value: LLVMValueRef?) {
|
||||||
if (declaration == null || target == declaration) {
|
if (declaration == null || target == declaration) {
|
||||||
if ((target as IrFunction).returnsUnit()) {
|
if ((target as IrFunction).returnsUnit()) {
|
||||||
@@ -748,9 +741,9 @@ internal class CodeGeneratorVisitor(val context: Context, val lifetimes: Map<IrE
|
|||||||
|
|
||||||
|
|
||||||
private val scope by lazy {
|
private val scope by lazy {
|
||||||
if (!context.shouldContainLocationDebugInfo())
|
if (!context.shouldContainLocationDebugInfo() || declaration == null)
|
||||||
return@lazy null
|
return@lazy null
|
||||||
declaration?.scope() ?: llvmFunction!!.scope(0, subroutineType(context, codegen.llvmTargetData, listOf(context.irBuiltIns.intType)))
|
declaration.scope() ?: llvmFunction.scope(0, subroutineType(context, codegen.llvmTargetData, listOf(context.irBuiltIns.intType)))
|
||||||
}
|
}
|
||||||
|
|
||||||
private val fileScope = (fileScope() as? FileScope)
|
private val fileScope = (fileScope() as? FileScope)
|
||||||
|
|||||||
Reference in New Issue
Block a user