------- 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

Reply via email to