compiler: key deferInvokeFuncs on distinct name

This commit is contained in:
Jake Bailey
2026-07-21 14:32:01 -07:00
committed by Ron Evans
parent b536dd6f79
commit 3071e339cd
3 changed files with 51 additions and 6 deletions
+6 -2
View File
@@ -1193,8 +1193,7 @@ func (c *compilerContext) getMethodSetValue(methods []*types.Func) llvm.Value {
// thunk is declared, not defined: it will be defined by the interface lowering
// pass.
func (c *compilerContext) getInvokeFunction(instr *ssa.CallCommon) llvm.Value {
s, _ := c.getTypeCodeName(instr.Value.Type().Underlying())
fnName := s + "." + instr.Method.Name() + "$invoke"
fnName := c.getInvokeFunctionName(instr)
llvmFn := c.mod.NamedFunction(fnName)
if llvmFn.IsNil() {
sig := instr.Method.Type().(*types.Signature)
@@ -1213,6 +1212,11 @@ func (c *compilerContext) getInvokeFunction(instr *ssa.CallCommon) llvm.Value {
return llvmFn
}
func (c *compilerContext) getInvokeFunctionName(instr *ssa.CallCommon) string {
s, _ := c.getTypeCodeName(instr.Value.Type().Underlying())
return s + "." + instr.Method.Name() + "$invoke"
}
// createInterfaceTypeAssert creates a call to a declared-but-not-defined
// $typeassert function for the given interface. This function will be defined
// by the interface lowering pass as a type-ID comparison chain, avoiding the