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) check(err)
ctx.cTransformer.TransformModule(ret) ctx.cTransformer.TransformModule(ret.Path(), ret.Module())
aPkg.LPkg = ret aPkg.LPkg = ret
cgoLLFiles, cgoLdflags, err := buildCgo(ctx, aPkg, aPkg.Package.Syntax, externs, verbose) 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, ".") return !strings.Contains(name, ".")
} }
func (p *Transformer) TransformModule(pkg ssa.Package) { func (p *Transformer) TransformModule(path string, m llvm.Module) {
m := pkg.Module()
ctx := m.Context() ctx := m.Context()
var fns []llvm.Value var fns []llvm.Value
var callInstrs []llvm.Value var callInstrs []llvm.Value
@@ -67,6 +66,13 @@ func (p *Transformer) TransformModule(pkg ssa.Package) {
p.transformFuncCall(m, fn) p.transformFuncCall(m, fn)
if p.isWrapFunctionType(m.Context(), fn.GlobalValueType()) { if p.isWrapFunctionType(m.Context(), fn.GlobalValueType()) {
fns = append(fns, fn) 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) fn = llvm.NextFunction(fn)