This is the mail archive of the
gcc-bugs@gcc.gnu.org
mailing list for the GCC project.
[Bug tree-optimization/58069] New: ICE in tree_ssa_unswitch_loops at -O3 in 32 bit mode
- From: "su at cs dot ucdavis.edu" <gcc-bugzilla at gcc dot gnu dot org>
- To: gcc-bugs at gcc dot gnu dot org
- Date: Sat, 03 Aug 2013 01:27:00 +0000
- Subject: [Bug tree-optimization/58069] New: ICE in tree_ssa_unswitch_loops at -O3 in 32 bit mode
- Auto-submitted: auto-generated
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=58069
Bug ID: 58069
Summary: ICE in tree_ssa_unswitch_loops at -O3 in 32 bit mode
Product: gcc
Version: unknown
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: tree-optimization
Assignee: unassigned at gcc dot gnu.org
Reporter: su at cs dot ucdavis.edu
The following code causes an ICE when compiled with the current gcc trunk at
-O3 on x86_64-linux in 32-bit mode only. This is a regression from 4.8.x.
It may be related to 58018, which also manifests in 64-bit mode though.
This testcase is also a lot more complex than the one for 58018; I wasn't able
to reduce it further.
$ gcc-trunk -v
gcc version 4.9.0 20130801 (experimental) [trunk revision 201397] (GCC)
$ gcc-trunk -m64 -O3 reduced.c
/tmp/ccHrLaas.o: In function `main':
reduced.c:(.text.startup+0x7): undefined reference to `fn2'
reduced.c:(.text.startup+0x18): undefined reference to `fn3'
reduced.c:(.text.startup+0x54): undefined reference to `fn7'
reduced.c:(.text.startup+0x76): undefined reference to `fn4'
reduced.c:(.text.startup+0x87): undefined reference to `fn6'
reduced.c:(.text.startup+0x96): undefined reference to `fn5'
collect2: error: ld returned 1 exit status
$ gcc-trunk -m32 -O2 reduced.c
/tmp/cc6hsIbp.o: In function `main':
reduced.c:(.text.startup+0x55): undefined reference to `fn2'
reduced.c:(.text.startup+0x72): undefined reference to `fn4'
reduced.c:(.text.startup+0xfe): undefined reference to `fn7'
reduced.c:(.text.startup+0x117): undefined reference to `fn3'
reduced.c:(.text.startup+0x127): undefined reference to `fn6'
reduced.c:(.text.startup+0x137): undefined reference to `fn5'
collect2: error: ld returned 1 exit status
$ gcc-4.8 -m32 -O3 reduced.c
/tmp/ccCehBNw.o: In function `main':
reduced.c:(.text.startup+0xa): undefined reference to `fn2'
reduced.c:(.text.startup+0x18): undefined reference to `fn3'
reduced.c:(.text.startup+0x52): undefined reference to `fn7'
reduced.c:(.text.startup+0x6f): undefined reference to `fn4'
reduced.c:(.text.startup+0x7e): undefined reference to `fn6'
reduced.c:(.text.startup+0x8e): undefined reference to `fn5'
collect2: error: ld returned 1 exit status
$ gcc-trunk -m32 -O3 reduced.c
reduced.c: In function âmainâ:
reduced.c:43:5: internal compiler error: Segmentation fault
int main ()
^
0x7d52ef crash_signal
../../gcc-trunk/gcc/toplev.c:334
0x7fd37b ssa_default_def(function*, tree_node*)
../../gcc-trunk/gcc/tree-dfa.c:314
0x7fd640 get_or_create_ssa_default_def(function*, tree_node*)
../../gcc-trunk/gcc/tree-dfa.c:362
0x8168ea get_reaching_def
../../gcc-trunk/gcc/tree-into-ssa.c:1184
0x81ca5a maybe_replace_use
../../gcc-trunk/gcc/tree-into-ssa.c:1784
0x81ca5a rewrite_update_stmt
../../gcc-trunk/gcc/tree-into-ssa.c:1967
0x81ca5a rewrite_update_enter_block
../../gcc-trunk/gcc/tree-into-ssa.c:2136
0xb3716a walk_dominator_tree(dom_walk_data*, basic_block_def*)
../../gcc-trunk/gcc/domwalk.c:210
0x8155f3 rewrite_blocks
../../gcc-trunk/gcc/tree-into-ssa.c:2216
0x81bd0e update_ssa(unsigned int)
../../gcc-trunk/gcc/tree-into-ssa.c:3303
0xb9e4da tree_unswitch_single_loop
../../gcc-trunk/gcc/tree-ssa-loop-unswitch.c:358
0xb9eac8 tree_ssa_unswitch_loops()
../../gcc-trunk/gcc/tree-ssa-loop-unswitch.c:116
Please submit a full bug report,
with preprocessed source if appropriate.
Please include the complete backtrace with any bug report.
See <http://gcc.gnu.org/bugs.html> for instructions.
$
---------------------------------------
int a, b, c, e, p;
static int *d = &c;
static int foo (int p)
{
int f, i, j = 0, *g = &a;
int h[] = { 0, 0, 0, 1, 0, 0, 0, 0, 1 };
for (i = 0; i < 1; i++)
{
int *k = &b;
{
int **l = 0;
int ***m = &l;
int ****n = &m;
j || fn2 ();
*n = 0;
if (*g)
fn3 ();
else
{
*k = 0;
fn4 ();
}
}
*g = *k;
for (j = 8; j >= 0; j--)
{
for (f = 3; f <= 8; f++)
*d |= h[f] && *k;
if (e)
{
fn5 (fn6 () && 1);
return 0;
}
int *o = &h[7];
*d = -1L <= ((*o ^= *k) && f);
}
fn7 (p <= (a & 5UL));
}
}
int main ()
{
p = foo (1);
return 0;
}