On Jun 15, 2006, at 4:47 PM, Andrew Pinski wrote:
The front-end in question has stopped working because the traditional setjmp/longjmp translation of try/catch constructs is no longer working correctly with versions of GCC higher than 4.0.
How is it no longer working? I don't understand how it could break.
I can. Just do up the simplest use of __builtin_setjmp and __builtin_longjmp and you'll see that there are no control flow edges. People totally broke C++ on non-dw2 systems?! This also caused warnings for variables that should be marked volatile that are homed in registers that cross the boundary to not give the `can be clobbered' warning. If there were an edge, it would be put in a register and then the warning kicks in. Without the edge, ssa `knows' the variable doesn't change:
foo() { int i = 99; __builtin_setjmp(A) if (i) { print i --i; __builtin_longjump(A); } It used to not infinite loop, now it does.