From 004fd0250190ce041c3bf821b8fd05e85c6213ec Mon Sep 17 00:00:00 2001 From: Gustavo Massaccesi Date: Mon, 18 Jul 2016 17:43:40 -0300 Subject: [PATCH] optimizer: don't mark (-) as omittable The application of some procedures are omittables when the arguments have certain properties. Check the arity of the procedure before marking the application as omittable. The only case that appears to be relevant is the expression (-). --- pkgs/racket-test-core/tests/racket/optimize.rktl | 7 +++++++ racket/src/racket/src/optimize.c | 4 +++- 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/pkgs/racket-test-core/tests/racket/optimize.rktl b/pkgs/racket-test-core/tests/racket/optimize.rktl index 595dc2888c..0af03d685e 100644 --- a/pkgs/racket-test-core/tests/racket/optimize.rktl +++ b/pkgs/racket-test-core/tests/racket/optimize.rktl @@ -4339,6 +4339,13 @@ (check-number-op-unary 'sub1) (check-number-op-unary 'abs)) +(test-comp '(lambda () (-) (void)) + '(lambda () (void)) + #f) +(test-comp '(lambda () (/) (void)) + '(lambda () (void)) + #f) + ;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; Check elimination of dead code after error (test-comp '(lambda () (random) (error 'error)) diff --git a/racket/src/racket/src/optimize.c b/racket/src/racket/src/optimize.c index 14c7485bba..11887408bd 100644 --- a/racket/src/racket/src/optimize.c +++ b/racket/src/racket/src/optimize.c @@ -3431,7 +3431,9 @@ static Scheme_Object *finish_optimize_application(Scheme_App_Rec *app, Optimize_ info->single_result = -info->single_result; } - if (SCHEME_PRIMP(app->args[0])) { + if (SCHEME_PRIMP(app->args[0]) + && (app->num_args >= ((Scheme_Primitive_Proc *)app->args[0])->mina) + && (app->num_args <= ((Scheme_Primitive_Proc *)app->args[0])->mu.maxa)) { Scheme_Object *app_o = (Scheme_Object *)app, *rator = app->args[0]; Scheme_Object *rand1 = NULL, *rand2 = NULL;