[Bug tree-optimization/81814] New: Incorrect behaviour at -O0 (conditional operator)
babokin at gmail dot com
gcc-bugzilla@gcc.gnu.org
Fri Aug 11 07:53:00 GMT 2017
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=81814
Bug ID: 81814
Summary: Incorrect behaviour at -O0 (conditional operator)
Product: gcc
Version: 8.0
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: tree-optimization
Assignee: unassigned at gcc dot gnu.org
Reporter: babokin at gmail dot com
Target Milestone: ---
gcc trunk, x86_64.
The test case is simple and my understanding that the correct result is
0x01000000, while gcc produces 0. Slight massaging of the code (like removal of
"* m2") changes the behaviour to be correct. Not sure whom to blame - front-end
or optimizations (even though it's -O0).
> cat f.cpp
#include <stdio.h>
unsigned long long int m2 = 1;
int xxx = 0x01000000;
int main() {
int a = ( ( (char) xxx) ? 0 : xxx) * m2;
printf("0x%x (expected 0x01000000)\n", a);
return 0;
}
> g++ -O0 f.cpp -o out; ./out;
0x0 (expected 0x01000000)
> clang++ -O0 f.cpp -o out; ./out
0x1000000 (expected 0x01000000)
More information about the Gcc-bugs
mailing list