From faa0877127cd5052d44b5fd311d2488893e041d0 Mon Sep 17 00:00:00 2001 From: Martin Nowak Date: Tue, 7 Oct 2014 02:37:59 +0200 Subject: [PATCH] fix Issue 13504 - ICE(backend/cgelem.c 2418) with "-O -cov" - assert failed because goal wasn't properly passed down --- src/backend/cgelem.c | 8 ++++---- test/runnable/test13504.d | 11 +++++++++++ 2 files changed, 15 insertions(+), 4 deletions(-) create mode 100644 test/runnable/test13504.d diff --git a/src/backend/cgelem.c b/src/backend/cgelem.c index 9007e22fa215..83f768f8c76a 100644 --- a/src/backend/cgelem.c +++ b/src/backend/cgelem.c @@ -2347,13 +2347,13 @@ STATIC elem * eldiv(elem *e, goal_t goal) * Convert (a op b) op c to a op (b op c). */ -STATIC elem * swaplog(elem *e) +STATIC elem * swaplog(elem *e, goal_t goal) { elem *e1; e1 = e->E1; e->E1 = e1->E2; e1->E2 = e; - return optelem(e1,GOALvalue); + return optelem(e1,goal); } STATIC elem * eloror(elem *e, goal_t goal) @@ -2386,7 +2386,7 @@ STATIC elem * eloror(elem *e, goal_t goal) } if (e1->Eoper == OPoror) { /* convert (a||b)||c to a||(b||c). This will find more CSEs. */ - return swaplog(e); + return swaplog(e, goal); } e2 = elscancommas(e2); e1 = elscancommas(e1); @@ -2723,7 +2723,7 @@ STATIC elem * elandand(elem *e, goal_t goal) } if (e1->Eoper == OPandand) { /* convert (a&&b)&&c to a&&(b&&c). This will find more CSEs. */ - return swaplog(e); + return swaplog(e, goal); } e2 = elscancommas(e2); diff --git a/test/runnable/test13504.d b/test/runnable/test13504.d new file mode 100644 index 000000000000..eed8739d6880 --- /dev/null +++ b/test/runnable/test13504.d @@ -0,0 +1,11 @@ +// REQUIRED_ARGS: -O -cov + +bool func(T)() +{ + return true; +} + +void main() +{ + assert(func!int() || int.sizeof); +}