diff --git a/src/backend/cg87.c b/src/backend/cg87.c index 3d18eebfaa62..eda4213c191a 100644 --- a/src/backend/cg87.c +++ b/src/backend/cg87.c @@ -922,7 +922,7 @@ code *fixresult87(elem *e,regm_t retregs,regm_t *pretregs) else { if (*pretregs & mPSW) { if (!(retregs & mPSW)) - { assert(retregs & mST0); + { c1 = genftst(c1,e,!(*pretregs & (mST0 | XMMREGS))); // FTST } } diff --git a/test/runnable/mars1.d b/test/runnable/mars1.d index d48eca3a97c5..e0dafee99745 100644 --- a/test/runnable/mars1.d +++ b/test/runnable/mars1.d @@ -1125,6 +1125,18 @@ void test9449() if (arr[0].g != 4.0) assert(0); } +//////////////////////////////////////////////////////////////////////// +// https://issues.dlang.org/show_bug.cgi?id=12057 + +bool prop12057(real x) { return false; } +double f12057(real) { return double.init; } +void test12057() +{ + real fc = f12057(real.init); + if (fc == 0 || fc.prop12057) {} +} + + //////////////////////////////////////////////////////////////////////// int main() @@ -1159,6 +1171,7 @@ int main() test7565(); test12833(); test9449(); + test12057(); printf("Success\n"); return 0; }