Reduced testcase to be attached, compile in the build dir with: gcc/xgcc -Bgcc -S p.adb -Igcc/ada/rts -O2
+===========================GNAT BUG DETECTED==============================+ | 4.5.0 20090818 (experimental) [trunk revision 150875] (i586-suse-linux-gnu) GCC error:| | tree check: expected integer_cst, have var_decl in int_const_binop, | | at fold-const.c:1668 | | Error detected around p.adb:31:4 (gdb) bt #0 internal_error (gmsgid=0xab540b4 "tree check: %s, have %s in %s, at %s:%d") at /home/eric/svn/gcc/gcc/diagnostic.c:674 #1 0x0995d788 in tree_check_failed (node=0xf7dd90c0, file=0xaa4cd04 "/home/eric/svn/gcc/gcc/fold-const.c", line=1668, function=0xaa4d6a3 "int_const_binop") at /home/eric/svn/gcc/gcc/tree.c:7460 #2 0x0894c9ab in int_const_binop (code=PLUS_EXPR, arg1=0xf7dda658, arg2=0xf7dd90c0, notrunc=0) at /home/eric/svn/gcc/gcc/fold-const.c:1668 #3 0x0938768e in build_ref_for_offset_1 (res=0xffffcc90, type=0xf7dcdaf0, offset=0, exp_type=0xf7dbb9a0) at /home/eric/svn/gcc/gcc/tree-sra.c:1091 #4 0x09387804 in build_ref_for_offset (expr=0xffffcc90, type=0xf7dcdaf0, offset=0, exp_type=0xf7dbb9a0, allow_ptr=0 '\0') at /home/eric/svn/gcc/gcc/tree-sra.c:1136 (gdb) frame 3 #3 0x0938768e in build_ref_for_offset_1 (res=0xffffcc90, type=0xf7dcdaf0, offset=0, exp_type=0xf7dbb9a0) at /home/eric/svn/gcc/gcc/tree-sra.c:1091 1091 index = int_const_binop (PLUS_EXPR, index, (gdb) p debug_tree(type) <array_type 0xf7dcdaf0 p__proc2GP464__T10b type <integer_type 0xf7dbb9a0 integer type <integer_type 0xf7d0e310 integer sizes-gimplified public visited SI size <integer_cst 0xf7d01498 constant 32> unit size <integer_cst 0xf7d01284 constant 4> align 32 symtab 0 alias set 2 canonical type 0xf7d0e310 precision 32 min <integer_cst 0xf7d01444 -2147483648> max <integer_cst 0xf7d01460 2147483647> pointer_to_this <pointer_type 0xf7d0ed20>> sizes-gimplified public SI size <integer_cst 0xf7d01498 32> unit size <integer_cst 0xf7d01284 4> align 32 symtab 0 alias set 2 canonical type 0xf7dbb9a0 precision 32 min <integer_cst 0xf7d3fb28 -2147483648> max <integer_cst 0xf7dc716c 2147483647> RM size <integer_cst 0xf7d01498 32> RM min <integer_cst 0xf7d01444 -2147483648> RM max <integer_cst 0xf7d01460 2147483647> pointer_to_this <pointer_type 0xf7dc9230> chain <type_decl 0xf7dbba10 integer>> readonly sizes-gimplified nonaliased-component BLK size <integer_cst 0xf7d01690 type <integer_type 0xf7d0e070 bit_size_type> constant 128> unit size <integer_cst 0xf7d016ac type <integer_type 0xf7d0e000 long int> constant 16> align 32 symtab 0 alias set 6 canonical type 0xf7dcdaf0 domain <integer_type 0xf7dcd850 type <integer_type 0xf7d0e000 long int sizes-gimplified public visited sizetype SI size <integer_cst 0xf7d01498 32> unit size <integer_cst 0xf7d01284 4> align 32 symtab 0 alias set -1 canonical type 0xf7d0e000 precision 32 min <integer_cst 0xf7d016e4 -2147483648> max <integer_cst 0xf7d01700 2147483647>> sizes-gimplified public SI size <integer_cst 0xf7d01498 32> unit size <integer_cst 0xf7d01284 4> align 32 symtab 0 alias set -1 canonical type 0xf7dcd850 precision 32 min <var_decl 0xf7dd90c0 D.2323> max <var_decl 0xf7dd9180 D.2325> index type <integer_type 0xf7dcd770 p__proc2GP464__T9b___XD type <integer_type 0xf7d0e310 integer> sizes-gimplified SI size <integer_cst 0xf7d01498 32> unit size <integer_cst 0xf7d01284 4> align 32 symtab 0 alias set 2 canonical type 0xf7dcd770 precision 32 min <integer_cst 0xf7dc75b0 -2147483648> max <integer_cst 0xf7dc78a4 2147483647> RM size <integer_cst 0xf7d01498 32> RM min <nop_expr 0xf7dccd60> RM max <plus_expr 0xf7dce318> chain <type_decl 0xf7dcd7e0 p__proc2GP464__T9b___XD>> chain <type_decl 0xf7dcd8c0 D.2234>> pointer_to_this <pointer_type 0xf7dd41c0>> Looks like the new SRA is not fully prepared to handle arrays with non-constant bounds for its TYPE_DOMAIN. -- Summary: [4.5 regression] ACATS c43205b fails at -O2 (tree-sra) Product: gcc Version: 4.5.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: tree-optimization AssignedTo: unassigned at gcc dot gnu dot org ReportedBy: ebotcazou at gcc dot gnu dot org GCC target triplet: ix86-*-* http://gcc.gnu.org/bugzilla/show_bug.cgi?id=41112