------- Comment #4 from wilson at tuliptree dot org 2008-04-01 06:26 ------- Subject: Re: New: ICE on ia64 with vector declaration inside #pragma omp parallel
steigers at phys dot ethz dot ch wrote: > g++ -Wall -fopenmp -save-temps -o ice.o -c ice.h I can reproduce this. It dies in the eh pass. We have a TRY_CATCH_EXPR with an empty catch clause. This fails in lower_eh_constructs_1 case TRY_CATCH_EXPR, as i->ptr is null, and hence tsi_stmt segfaults. It seems wrong to have an empty catch clause here. This was created during the ehopt pass by optimize_double_finally. We have try { A() } finally { try { } catch { ~A() } } try { ... } finally { ~A() } which is converted into try { A() } catch { } try { ~B() ... } finally { ~A() } thus giving us the problematic empty catch clause. The testcase doesn't fail on x86 as we end up with slightly different gimple. In the 004t.gimple dump file, for x86 we have struct vector x; __comp_ctor (&D.7263); try { D.7261 = 0.0; and for IA-64 we have struct vector x; D.7300 = 0.0; try { __comp_ctor (&D.7302); The different placement of the ctor means the dtor ends up in different places, and hence the bug triggers on IA-64 but not x86. I don't know why we are getting the different gimplification here. This seems odd, but I haven't tried looking into this yet. Jim -- http://gcc.gnu.org/bugzilla/show_bug.cgi?id=35364