From 92615049aa950db1dd34b6d8daf95d7a2940db35 Mon Sep 17 00:00:00 2001 From: Gustavo Massaccesi Date: Tue, 23 Dec 2014 10:40:35 -0300 Subject: [PATCH] Fix make_discarding_first_sequence Ensure that the first expression is single valued. --- .../racket-test-core/tests/racket/optimize.rktl | 17 +++++++++++++++++ racket/src/racket/src/optimize.c | 2 ++ 2 files changed, 19 insertions(+) diff --git a/pkgs/racket-test-core/tests/racket/optimize.rktl b/pkgs/racket-test-core/tests/racket/optimize.rktl index 1b8c1a92c3..0ba677e052 100644 --- a/pkgs/racket-test-core/tests/racket/optimize.rktl +++ b/pkgs/racket-test-core/tests/racket/optimize.rktl @@ -1537,6 +1537,9 @@ '(lambda (x) x)) (test-comp '(lambda (x) (if (cons 1 x) 78 78)) '(lambda (x) 78)) +(test-comp '(lambda (x) (if (values 1 2) 78 78)) + '(lambda (x) (values 1 2) 78) + #f) (test-comp '(lambda (x) (if (let ([r (something)]) (if r r (something-else))) @@ -2982,6 +2985,20 @@ `(lambda (b) (with-continuation-mark 'x 'y (box (box b))))) +(test-comp `(lambda () (list 1)) + `(lambda () + (with-continuation-mark 'x 'y (list 1)))) +(test-comp `(lambda () (random) (list 1)) + `(lambda () + (with-continuation-mark 'x (random) (list 1)))) +(test-comp `(lambda (f) (values (f)) (list 1)) + `(lambda (f) + (with-continuation-mark 'x (f) (list 1)))) +(test-comp `(lambda () (values 1 2) (list 1)) + `(lambda () + (with-continuation-mark 'x (values 1 2) (list 1))) + #f) + (test-comp `(lambda (x y f) (set! x 5) (list diff --git a/racket/src/racket/src/optimize.c b/racket/src/racket/src/optimize.c index eefd95d975..a9df8f7fb1 100644 --- a/racket/src/racket/src/optimize.c +++ b/racket/src/racket/src/optimize.c @@ -685,6 +685,8 @@ static Scheme_Object *make_discarding_first_sequence(Scheme_Object *e1, Scheme_O e1 = optimize_ignored(e1, info, id_offset, 1, 1, 5); if (!e1) return e2; + if (!single_valued_noncm_expression(e1, 5)) + e1 = ensure_single_value(e1); return make_sequence_2(e1, e2); }