https://llvm.org/bugs/show_bug.cgi?id=27858
Bug ID: 27858 Summary: mldst-motion miscompile with call to exit() Product: libraries Version: trunk Hardware: PC OS: Windows NT Status: NEW Severity: normal Priority: P Component: Scalar Optimizations Assignee: unassignedb...@nondot.org Reporter: eli.fried...@gmail.com CC: llvm-bugs@lists.llvm.org Classification: Unclassified Testcase: #include <stdlib.h> void f() { exit(1); } void (*ff)() = f; int r, s; void g(int a, int*restrict p) { if (a) {ff(); r = p[1]; } else { s = p[1]; } } void (*gg)(int, int*restrict) = g; int main() { gg(1, 0); } Works with gcc or clang -O0, crashes with clang -O2. Testcase: #include <stdlib.h> #include <stdio.h> void f() { throw 1; } void (*ff)() = f; void f2() {} void (*ff2)() = f2; int r, s; void g(int a, int*__restrict p) { if (a) { ff2(); p[1] = 2; ff(); } else { p[1] = 2; } } void (*gg)(int, int*restrict) = g; int main() { int a[2] = {0}; try { gg(1, a); } catch (...) {} if (a[1] != 2) abort(); } Works with gcc or clang -O0, aborts with clang -O2. I think the problem is MergedLoadStoreMotion::isLoadHoistBarrierInRange/isStoreSinkBarrierInRange; you can't use alias analysis to prove that a pointer is valid. (Artificial testcases.) -- You are receiving this mail because: You are on the CC list for the bug.
_______________________________________________ llvm-bugs mailing list llvm-bugs@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-bugs