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.