http://gcc.gnu.org/bugzilla/show_bug.cgi?id=56837
Bug #: 56837 Summary: -ftree-loop-distribute-patterns generates incorrect code Classification: Unclassified Product: gcc Version: 4.8.0 Status: UNCONFIRMED Severity: major Priority: P3 Component: tree-optimization AssignedTo: unassig...@gcc.gnu.org ReportedBy: pmblak...@googlemail.com Created attachment 29801 --> http://gcc.gnu.org/bugzilla/attachment.cgi?id=29801 Compilation output from adding -v -save-temps With gcc-4.8.0 release, and up to and including gcc-4.8-20130328, -ftree-loop-distribute-patterns can give incorrect results: Minimal test-case (named OptBug-4.8.C): extern int __builtin_printf (__const char *__restrict __format, ...); int main(void) { bool* b = new bool[5]; for(unsigned int i=0 ; i < 5 ; i++) { b[i] = true; } for(unsigned int i=0 ; i < 5 ; i++) { __builtin_printf("%d\n", b[i]); } return 0; } Compilation command: g++-4.8-20130328 OptBug-4.8.C -o OptBug-4.8 -O1 -ftree-loop-distribute-patterns Expected output: 1 1 1 1 1 Actual output: 255 255 255 255 255 The expected output is produced if the -ftree-loop-distribute-patterns flag is removed. The incorrect behaviour is not exhibited by gcc-4.7.2.