From 46523d307b5b2309ab57aa24d41cdedd9139179c Mon Sep 17 00:00:00 2001 From: Matthew Flatt Date: Mon, 24 Feb 2014 08:47:21 -0700 Subject: [PATCH] fix PLT_VALIDATE_COMPILE interaction with 3-D code Makes the "optimize.rktl" test suite pass when PLT_VALIDATE_COMPILE is defined. --- racket/src/racket/src/validate.c | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/racket/src/racket/src/validate.c b/racket/src/racket/src/validate.c index 4a160f6edd..efb438ffbc 100644 --- a/racket/src/racket/src/validate.c +++ b/racket/src/racket/src/validate.c @@ -1992,11 +1992,15 @@ static int validate_expr(Mz_CPort *port, Scheme_Object *expr, Such a closure can refer back to itself, so we use a flag to track cycles. Also check need_local_type. */ result = validate_join_const(result, expected_results); - if (SAME_TYPE(type, scheme_closure_type)) { + if (SAME_TYPE(type, scheme_closure_type) + /* If the closure is not empty, then it must be from 3-D code + (where PLT_VALIDATE_COMPILE is set), and validation is not + our responsibility here: */ + && (SCHEME_COMPILED_CLOS_CODE(expr)->closure_size == 0)) { Scheme_Closure_Data *data; no_typed(need_local_type, port); expr = (Scheme_Object *)SCHEME_COMPILED_CLOS_CODE(expr); - data = (Scheme_Closure_Data *)expr; + data = (Scheme_Closure_Data *)expr; if (SCHEME_CLOSURE_DATA_FLAGS(data) & CLOS_VALIDATED) { /* Done with this one. */ } else {