diff --git a/collects/tests/racket/foreign-test.rktl b/collects/tests/racket/foreign-test.rktl index 72fc821a8a..4814dc1762 100644 --- a/collects/tests/racket/foreign-test.rktl +++ b/collects/tests/racket/foreign-test.rktl @@ -463,6 +463,18 @@ (test (cast p _thing-pointer _intptr) cast q _stuff-pointer _intptr)) +(let () + (struct foo (ptr) + #:property prop:cpointer 0) + + (define a-foo (foo (malloc 16 'raw))) + (free a-foo) + (struct bar (ptr) + #:property prop:cpointer (λ (s) (bar-ptr s))) + + (define a-bar (bar (malloc 16 'raw))) + (free a-bar)) + (delete-test-files) (report-errs) diff --git a/src/foreign/foreign.c b/src/foreign/foreign.c index 37466cfa41..d44fea081a 100644 --- a/src/foreign/foreign.c +++ b/src/foreign/foreign.c @@ -1532,7 +1532,7 @@ static Scheme_Object *unwrap_cpointer_property(Scheme_Object *orig_v) if (val) { if (SCHEME_INTP(val)) v = scheme_struct_ref(v, SCHEME_INT_VAL(val)); - else if (SCHEME_PROCP(v)) { + else if (SCHEME_PROCP(val)) { Scheme_Object *a[1]; a[0] = v; v = _scheme_apply(val, 1, a); diff --git a/src/foreign/foreign.rktc b/src/foreign/foreign.rktc index 0058582fd1..4fc9628bf8 100755 --- a/src/foreign/foreign.rktc +++ b/src/foreign/foreign.rktc @@ -1320,7 +1320,7 @@ static Scheme_Object *unwrap_cpointer_property(Scheme_Object *orig_v) if (val) { if (SCHEME_INTP(val)) v = scheme_struct_ref(v, SCHEME_INT_VAL(val)); - else if (SCHEME_PROCP(v)) { + else if (SCHEME_PROCP(val)) { Scheme_Object *a[1]; a[0] = v; v = _scheme_apply(val, 1, a);