[codegen][debug info] initialize end of location info with start if it wasn't provided
This commit is contained in:
+9
-9
@@ -170,9 +170,9 @@ internal class FunctionGenerationContext(val function: LLVMValueRef,
|
|||||||
val vars = VariableManager(this)
|
val vars = VariableManager(this)
|
||||||
private val basicBlockToLastLocation = mutableMapOf<LLVMBasicBlockRef, LocationInfoRange>()
|
private val basicBlockToLastLocation = mutableMapOf<LLVMBasicBlockRef, LocationInfoRange>()
|
||||||
|
|
||||||
private fun update(block:LLVMBasicBlockRef, locationInfo: LocationInfo?, endLocation: LocationInfo? = null) {
|
private fun update(block:LLVMBasicBlockRef, startLocationInfo: LocationInfo?, endLocation: LocationInfo? = startLocationInfo) {
|
||||||
locationInfo ?: return
|
startLocationInfo ?: return
|
||||||
basicBlockToLastLocation.put(block, LocationInfoRange(locationInfo, endLocation))
|
basicBlockToLastLocation.put(block, LocationInfoRange(startLocationInfo, endLocation))
|
||||||
}
|
}
|
||||||
|
|
||||||
var returnType: LLVMTypeRef? = LLVMGetReturnType(getFunctionType(function))
|
var returnType: LLVMTypeRef? = LLVMGetReturnType(getFunctionType(function))
|
||||||
@@ -214,7 +214,7 @@ internal class FunctionGenerationContext(val function: LLVMValueRef,
|
|||||||
return bb
|
return bb
|
||||||
}
|
}
|
||||||
|
|
||||||
fun basicBlock(name:String = "label_", startLocationInfo:LocationInfo?, endLocationInfo: LocationInfo? = null): LLVMBasicBlockRef {
|
fun basicBlock(name:String = "label_", startLocationInfo:LocationInfo?, endLocationInfo: LocationInfo? = startLocationInfo): LLVMBasicBlockRef {
|
||||||
val result = LLVMInsertBasicBlock(this.currentBlock, name)!!
|
val result = LLVMInsertBasicBlock(this.currentBlock, name)!!
|
||||||
update(result, startLocationInfo, endLocationInfo)
|
update(result, startLocationInfo, endLocationInfo)
|
||||||
LLVMMoveBasicBlockAfter(result, this.currentBlock)
|
LLVMMoveBasicBlockAfter(result, this.currentBlock)
|
||||||
@@ -382,10 +382,10 @@ internal class FunctionGenerationContext(val function: LLVMValueRef,
|
|||||||
}
|
}
|
||||||
|
|
||||||
val position = position()
|
val position = position()
|
||||||
val endLocation = position?.start.let { position?.end }
|
val endLocation = position?.end
|
||||||
val success = basicBlock("call_success", endLocation)
|
val success = basicBlock("call_success", endLocation)
|
||||||
val result = LLVMBuildInvoke(builder, llvmFunction, rargs, args.size, success, unwind, "")!!
|
val result = LLVMBuildInvoke(builder, llvmFunction, rargs, args.size, success, unwind, "")!!
|
||||||
update(success, endLocation, endLocation)
|
update(success, endLocation)
|
||||||
positionAtEnd(success)
|
positionAtEnd(success)
|
||||||
return result
|
return result
|
||||||
}
|
}
|
||||||
@@ -637,7 +637,7 @@ internal class FunctionGenerationContext(val function: LLVMValueRef,
|
|||||||
|
|
||||||
val position = position()
|
val position = position()
|
||||||
val endPosition = position()?.end
|
val endPosition = position()?.end
|
||||||
val bbExit = basicBlock(startLocationInfo = endPosition, endLocationInfo = endPosition)
|
val bbExit = basicBlock(startLocationInfo = endPosition)
|
||||||
val resultPhi = appendingTo(bbExit) {
|
val resultPhi = appendingTo(bbExit) {
|
||||||
phi(resultType)
|
phi(resultType)
|
||||||
}
|
}
|
||||||
@@ -659,8 +659,8 @@ internal class FunctionGenerationContext(val function: LLVMValueRef,
|
|||||||
|
|
||||||
inline fun ifThen(condition: LLVMValueRef, thenBlock: () -> Unit) {
|
inline fun ifThen(condition: LLVMValueRef, thenBlock: () -> Unit) {
|
||||||
val endPosition = position()?.end
|
val endPosition = position()?.end
|
||||||
val bbExit = basicBlock(startLocationInfo = endPosition, endLocationInfo = endPosition)
|
val bbExit = basicBlock(startLocationInfo = endPosition)
|
||||||
val bbThen = basicBlock(startLocationInfo = endPosition, endLocationInfo = endPosition)
|
val bbThen = basicBlock(startLocationInfo = endPosition)
|
||||||
|
|
||||||
condBr(condition, bbThen, bbExit)
|
condBr(condition, bbThen, bbExit)
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user