[K/N] Added checks for tests that current frame after catch is right

This commit is contained in:
Elena Lepilkina
2021-10-14 15:58:54 +03:00
committed by Space
parent ccddf5b2d5
commit 2d72f4d5a9
9 changed files with 25 additions and 0 deletions
@@ -1051,6 +1051,11 @@ internal abstract class FunctionGenerationContext(
return exception
}
fun generateFrameCheck() {
assert(slotsPhi != null)
call(context.llvm.checkCurrentFrameFunction, listOf(slotsPhi!!))
}
inline fun ifThenElse(
condition: LLVMValueRef,
thenValue: LLVMValueRef,
@@ -457,6 +457,7 @@ internal class Llvm(val context: Context, val llvmModule: LLVMModuleRef) : Runti
val enterFrameFunction = importRtFunction("EnterFrame")
val leaveFrameFunction = importRtFunction("LeaveFrame")
val setCurrentFrameFunction = importRtFunction("SetCurrentFrame")
val checkCurrentFrameFunction = importRtFunction("CheckCurrentFrame")
val lookupInterfaceTableRecord = importRtFunction("LookupInterfaceTableRecord")
val isInstanceFunction = importRtFunction("IsInstance")
val isInstanceOfClassFastFunction = importRtFunction("IsInstanceOfClassFast")
@@ -1213,6 +1213,7 @@ internal class CodeGeneratorVisitor(val context: Context, val lifetimes: Map<IrE
fun genCatchBlock() {
using(VariableScope()) {
currentCodeContext.genDeclareVariable(catch.catchParameter, exception, null)
functionGenerationContext.generateFrameCheck()
evaluateExpressionAndJump(catch.result, success)
}
}