This testcase fails with g++

--cut here--
typedef double EXPRESS[5];

extern int Terms;

void Parse_Rel_Factor (EXPRESS Express, int *Terms)
{
  EXPRESS Local_Express = {5.0, 4.0, 3.0, 2.0, 1.0};
  int Local_Terms = 5;

  int i;

  for (i = (*Terms); i < Local_Terms; i++)
    Express[i] = 0.0;

  Express[i] += Local_Express[i];
}

double Parse_Float ()
{
  EXPRESS Express = {1.0, 2.0, 3.0, 4.0, 5.0};

  Parse_Rel_Factor (Express, &Terms);
}
--cut here--

g++ -O3 -msse2 -ftree-parallelize-loops=4 tt.cpp
tt.cpp: In function âdouble Parse_Float()â:
tt.cpp:18: error: invariant not recomputed when ADDR_EXPR changed
&(*Express.105_26)[0];

tt.cpp:18: internal compiler error: verify_stmts failed
Please submit a full bug report,
with preprocessed source if appropriate.
See <http://gcc.gnu.org/bugs.html> for instructions.

Please note, that the same testcase, renamed to __.c compiles OK with 'gcc -O3
-msse2 -ftree-parallelize-loops=4 -S tt.c'. [I guess that due to this, 'c++'
component should be selected.]

Also note, that if 'Express[i] += Local_Express[i];' line is removed, g++
segfaults trying to output diagnostics in:

Program received signal SIGSEGV, Segmentation fault.
0x081165d8 in cp_diagnostic_starter (context=0x8a5e040, diagnostic=0xbf8874b0)
at ../../gcc-svn/trunk/gcc/cp/error.c:2466
/home/uros/gcc-svn/trunk/gcc/cp/error.c:2466:64935:beg:0x81165d8
(gdb) bt
#0  0x081165d8 in cp_diagnostic_starter (context=0x8a5e040,
diagnostic=0xbf8874b0) at ../../gcc-svn/trunk/gcc/cp/error.c:2466
#1  0x082b9249 in diagnostic_report_diagnostic (context=0x8a5e040,
diagnostic=0xbf8874b0) at ../../gcc-svn/trunk/gcc/diagnostic.c:421
#2  0x082b952a in error (gmsgid=0x893c52c "invariant not recomputed when
ADDR_EXPR changed") at ../../gcc-svn/trunk/gcc/diagnostic.c:558
#3  0x084b3a51 in verify_expr (tp=0xb7c1c724, walk_subtrees=0xbf887568,
data=0x0) at ../../gcc-svn/trunk/gcc/tree-cfg.c:3191
#4  0x0867544b in walk_tree_1 (tp=0xb7c1c724, func=0x84b2d50 <verify_expr>,
data=0x0, pset=0x0, lh=0) at ../../gcc-svn/trunk/gcc/tree.c:8376
#5  0x0867557a in walk_tree_1 (tp=0xb7ccfdfc, func=0x84b2d50 <verify_expr>,
data=0x0, pset=0x0, lh=0) at ../../gcc-svn/trunk/gcc/tree.c:8615
#6  0x0849ff1c in verify_stmts () at ../../gcc-svn/trunk/gcc/tree-cfg.c:4140
#7  0x085fb00f in verify_ssa (check_modified_stmt=1 '\001') at
../../gcc-svn/trunk/gcc/tree-ssa.c:613
#8  0x08411b25 in execute_function_todo (data=0x80000) at
../../gcc-svn/trunk/gcc/passes.c:963
#9  0x08411779 in do_per_function (callback=0x8411900 <execute_function_todo>,
data=0x80000) at ../../gcc-svn/trunk/gcc/passes.c:805
#10 0x08411851 in execute_todo (flags=524288) at
../../gcc-svn/trunk/gcc/passes.c:989
#11 0x08411cda in execute_one_pass (pass=0x8a4f860) at
../../gcc-svn/trunk/gcc/passes.c:1081


-- 
           Summary: ICE: invariant not recomputed when ADDR_EXPR changed
                    with -ftree-parallelize-loops
           Product: gcc
           Version: 4.3.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: c++
        AssignedTo: unassigned at gcc dot gnu dot org
        ReportedBy: ubizjak at gmail dot com
 GCC build triplet: i686-pc-linux-gnu
  GCC host triplet: i686-pc-linux-gnu
GCC target triplet: i686-pc-linux-gnu


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=34355

Reply via email to