From 1fced8b109eb74b03adc232ca6057c2235505049 Mon Sep 17 00:00:00 2001 From: Daniel Murphy Date: Fri, 25 Jul 2014 04:34:16 +1000 Subject: [PATCH] Fix Issue 13023 - optimizer produces wrong code for comparision and division of ulon --- src/backend/cod3.c | 2 ++ test/runnable/mars1.d | 15 +++++++++++++++ 2 files changed, 17 insertions(+) diff --git a/src/backend/cod3.c b/src/backend/cod3.c index be53bdc884db..0a9b3cbd8a2c 100644 --- a/src/backend/cod3.c +++ b/src/backend/cod3.c @@ -2213,6 +2213,8 @@ code* gen_testcse(code *c, unsigned sz, targ_uns i) FLcs,i, FLconst,(targ_uns) 0); if ((I64 || I32) && sz == 2) c->Iflags |= CFopsize; + if (I64 && sz == 8) + code_orrex(c, REX_W); return c; } diff --git a/test/runnable/mars1.d b/test/runnable/mars1.d index f50563c1e407..abcb07fdd706 100644 --- a/test/runnable/mars1.d +++ b/test/runnable/mars1.d @@ -218,6 +218,20 @@ void testarrayinit() /////////////////////// +void test13023(ulong n) +{ + static void func(bool b) {} + + ulong k = 0; + + func(k >= n / 2); + + if (k >= n / 2) + assert(0); +} + +/////////////////////// + struct U { int a; union { char c; int d; } long b; } U f = { b:3, d:2, a:1 }; @@ -1200,6 +1214,7 @@ int main() test10715(); test10678(); test7565(); + test13023(0x10_0000_0000); test12833(); test9449(); test12057();