internal/cabi: transform cfunc check called

This commit is contained in:
visualfc
2025-08-12 10:39:41 +08:00
parent 7b36cca86b
commit d2d999d369
2 changed files with 9 additions and 3 deletions

View File

@@ -812,7 +812,7 @@ func buildPkg(ctx *context, aPkg *aPackage, verbose bool) error {
}
check(err)
ctx.cTransformer.TransformModule(ret)
ctx.cTransformer.TransformModule(ret.Path(), ret.Module())
aPkg.LPkg = ret
cgoLLFiles, cgoLdflags, err := buildCgo(ctx, aPkg, aPkg.Package.Syntax, externs, verbose)

View File

@@ -52,8 +52,7 @@ func (p *Transformer) isCFunc(name string) bool {
return !strings.Contains(name, ".")
}
func (p *Transformer) TransformModule(pkg ssa.Package) {
m := pkg.Module()
func (p *Transformer) TransformModule(path string, m llvm.Module) {
ctx := m.Context()
var fns []llvm.Value
var callInstrs []llvm.Value
@@ -67,6 +66,13 @@ func (p *Transformer) TransformModule(pkg ssa.Package) {
p.transformFuncCall(m, fn)
if p.isWrapFunctionType(m.Context(), fn.GlobalValueType()) {
fns = append(fns, fn)
use := fn.FirstUse()
for !use.IsNil() {
if call := use.User().IsACallInst(); !call.IsNil() && call.CalledValue() == fn {
callInstrs = append(callInstrs, call)
}
use = use.NextUse()
}
}
}
fn = llvm.NextFunction(fn)