[codegen][debug info] initialize end of location info with start if it wasn't provided

This commit is contained in:
Vasily Levchenko
2019-07-30 17:03:20 +03:00
parent 93662b8b18
commit bf3a47f0d3
@@ -170,9 +170,9 @@ internal class FunctionGenerationContext(val function: LLVMValueRef,
val vars = VariableManager(this)
private val basicBlockToLastLocation = mutableMapOf<LLVMBasicBlockRef, LocationInfoRange>()
private fun update(block:LLVMBasicBlockRef, locationInfo: LocationInfo?, endLocation: LocationInfo? = null) {
locationInfo ?: return
basicBlockToLastLocation.put(block, LocationInfoRange(locationInfo, endLocation))
private fun update(block:LLVMBasicBlockRef, startLocationInfo: LocationInfo?, endLocation: LocationInfo? = startLocationInfo) {
startLocationInfo ?: return
basicBlockToLastLocation.put(block, LocationInfoRange(startLocationInfo, endLocation))
}
var returnType: LLVMTypeRef? = LLVMGetReturnType(getFunctionType(function))
@@ -214,7 +214,7 @@ internal class FunctionGenerationContext(val function: LLVMValueRef,
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)!!
update(result, startLocationInfo, endLocationInfo)
LLVMMoveBasicBlockAfter(result, this.currentBlock)
@@ -382,10 +382,10 @@ internal class FunctionGenerationContext(val function: LLVMValueRef,
}
val position = position()
val endLocation = position?.start.let { position?.end }
val endLocation = position?.end
val success = basicBlock("call_success", endLocation)
val result = LLVMBuildInvoke(builder, llvmFunction, rargs, args.size, success, unwind, "")!!
update(success, endLocation, endLocation)
update(success, endLocation)
positionAtEnd(success)
return result
}
@@ -637,7 +637,7 @@ internal class FunctionGenerationContext(val function: LLVMValueRef,
val position = position()
val endPosition = position()?.end
val bbExit = basicBlock(startLocationInfo = endPosition, endLocationInfo = endPosition)
val bbExit = basicBlock(startLocationInfo = endPosition)
val resultPhi = appendingTo(bbExit) {
phi(resultType)
}
@@ -659,8 +659,8 @@ internal class FunctionGenerationContext(val function: LLVMValueRef,
inline fun ifThen(condition: LLVMValueRef, thenBlock: () -> Unit) {
val endPosition = position()?.end
val bbExit = basicBlock(startLocationInfo = endPosition, endLocationInfo = endPosition)
val bbThen = basicBlock(startLocationInfo = endPosition, endLocationInfo = endPosition)
val bbExit = basicBlock(startLocationInfo = endPosition)
val bbThen = basicBlock(startLocationInfo = endPosition)
condBr(condition, bbThen, bbExit)