3
0
Fork 0
mirror of https://github.com/Z3Prover/z3 synced 2026-07-04 22:36:10 +00:00

Fix unsafe.Pointer usage in Go propagator - use uintptr_t for cgo.Handle

Co-authored-by: NikolajBjorner <3085284+NikolajBjorner@users.noreply.github.com>
This commit is contained in:
copilot-swe-agent[bot] 2026-02-23 01:09:07 +00:00
parent 0de7af9112
commit d5030dfe30
3 changed files with 50 additions and 47 deletions

View file

@ -2,9 +2,10 @@ package z3
/*
#include "z3.h"
#include <stdint.h>
// Declarations for C helper functions defined in propagator_bridge.c
extern void z3go_solver_propagate_init(Z3_context ctx, Z3_solver s, void* user_ctx);
extern void z3go_solver_propagate_init(Z3_context ctx, Z3_solver s, uintptr_t user_ctx);
extern void z3go_solver_propagate_fixed(Z3_context ctx, Z3_solver s);
extern void z3go_solver_propagate_final(Z3_context ctx, Z3_solver s);
extern void z3go_solver_propagate_eq(Z3_context ctx, Z3_solver s);
@ -12,12 +13,11 @@ extern void z3go_solver_propagate_diseq(Z3_context ctx, Z3_solver s);
extern void z3go_solver_propagate_created(Z3_context ctx, Z3_solver s);
extern void z3go_solver_propagate_decide(Z3_context ctx, Z3_solver s);
extern void z3go_solver_propagate_on_binding(Z3_context ctx, Z3_solver s);
extern void z3go_solver_register_on_clause(Z3_context ctx, Z3_solver s, void* user_ctx);
extern void z3go_solver_register_on_clause(Z3_context ctx, Z3_solver s, uintptr_t user_ctx);
*/
import "C"
import (
"runtime/cgo"
"unsafe"
)
// UserPropagator implements a custom theory propagator for Z3.
@ -99,8 +99,7 @@ func newUserPropagator(ctx *Context, solver *Solver, iface UserPropagatorCallbac
iface: iface,
}
p.handle = cgo.NewHandle(p)
voidCtx := unsafe.Pointer(uintptr(p.handle))
C.z3go_solver_propagate_init(ctx.ptr, solver.ptr, voidCtx)
C.z3go_solver_propagate_init(ctx.ptr, solver.ptr, C.uintptr_t(p.handle))
return p
}
@ -266,8 +265,7 @@ func (s *Solver) NewOnClause(handler OnClauseHandler) *OnClause {
handler: handler,
}
oc.handle = cgo.NewHandle(oc)
voidCtx := unsafe.Pointer(uintptr(oc.handle))
C.z3go_solver_register_on_clause(s.ctx.ptr, s.ptr, voidCtx)
C.z3go_solver_register_on_clause(s.ctx.ptr, s.ptr, C.uintptr_t(oc.handle))
return oc
}