In a Solaris 8/x86 testsuite run, several testcases fails with an ICE: a SEGV in allocno_priority_compare_func. An example is FAIL: g++.old-deja/g++.bugs/900511_01.C (internal compiler error) FAIL: g++.old-deja/g++.bugs/900511_01.C (test for excess errors) WARNING: g++.old-deja/g++.bugs/900511_01.C compilation failed to produce executable $ ./cc1plus 900511_01.ii struct_1::operator int() struct_2::operator float() void test() int main() Analyzing compilation unit Performing interprocedural optimizations <*free_lang_data> <visibility> <early_local_cleanups> <whole-program> <inline>Assembling functions: struct_1::operator int() struct_2::operator float() void test() /vol/gcc/src/hg/trunk/solaris/gcc/testsuite/g++.old-deja/g++.bugs/900511_01.C: In function 'void test()': /vol/gcc/src/hg/trunk/solaris/gcc/testsuite/g++.old-deja/g++.bugs/900511_01.C:41:1: internal compiler error: Segmentation Fault In gdb, I find this stacktrace: Program received signal SIGSEGV, Segmentation fault. allocno_priority_compare_func (v1p=0x8d73c14, v2p=0x8d73c1c) at /vol/gcc/src/hg/trunk/solaris/gcc/ira-color.c:1750 1750 pri1 = allocno_priorities[ALLOCNO_NUM (a1)]; (gdb) where #0 allocno_priority_compare_func (v1p=0x8d73c14, v2p=0x8d73c1c) at /vol/gcc/src/hg/trunk/solaris/gcc/ira-color.c:1750 #1 0xdfadbb3d in qsort () from /usr/lib/libc.so.1 #2 0x084a61b5 in fast_allocation () at /vol/gcc/src/hg/trunk/solaris/gcc/ira-color.c:3260 #3 ira_color () at /vol/gcc/src/hg/trunk/solaris/gcc/ira-color.c:3325 #4 0x08491b88 in ira () at /vol/gcc/src/hg/trunk/solaris/gcc/ira.c:3278 #5 rest_of_handle_ira () at /vol/gcc/src/hg/trunk/solaris/gcc/ira.c:3433 #6 0x084f29a8 in execute_one_pass (pass=0x8c24a60) at /vol/gcc/src/hg/trunk/solaris/gcc/passes.c:1580 #7 0x084f2c89 in execute_pass_list (pass=0x8c24a60) at /vol/gcc/src/hg/trunk/solaris/gcc/passes.c:1635 #8 0x084f2c9c in execute_pass_list (pass=0x8cb0da0) at /vol/gcc/src/hg/trunk/solaris/gcc/passes.c:1636 #9 0x085f6382 in tree_rest_of_compilation (fndecl=0xdfa24b80) at /vol/gcc/src/hg/trunk/solaris/gcc/tree-optimize.c:420 #10 0x0879591d in cgraph_expand_function (node=0xdf992498) at /vol/gcc/src/hg/trunk/solaris/gcc/cgraphunit.c:1632 #11 0x08798c77 in cgraph_output_in_order () at /vol/gcc/src/hg/trunk/solaris/gcc/cgraphunit.c:1805 #12 cgraph_optimize () at /vol/gcc/src/hg/trunk/solaris/gcc/cgraphunit.c:1962 #13 0x08798fff in cgraph_finalize_compilation_unit () at /vol/gcc/src/hg/trunk/solaris/gcc/cgraphunit.c:1171 #14 0x08190a82 in cp_write_global_declarations () at /vol/gcc/src/hg/trunk/solaris/gcc/cp/decl2.c:3924 #15 0x0859d74c in compile_file (argc=2, argv=0x80477c4) at /vol/gcc/src/hg/trunk/solaris/gcc/toplev.c:997 #16 do_compile (argc=2, argv=0x80477c4) at /vol/gcc/src/hg/trunk/solaris/gcc/toplev.c:2342 #17 toplev_main (argc=2, argv=0x80477c4) at /vol/gcc/src/hg/trunk/solaris/gcc/toplev.c:2383 #18 0x082c16cb in main (argc=2, argv=0x80477c4) at /vol/gcc/src/hg/trunk/solaris/gcc/main.c:35 This is almost certainly another case of PR bootstrap/43870 and PR tree-optimization/42157. Vladimir, could you please have a look? Thanks. Rainer
This is a regression from GCC 3.4.6.
We ran into this on SPARC/Solaris 8 as well.
Subject: Bug 44763 Author: ro Date: Thu Sep 16 16:37:01 2010 New Revision: 164341 URL: http://gcc.gnu.org/viewcvs?root=gcc&view=rev&rev=164341 Log: Record PR middle-end/44763 in ChangeLog. Modified: trunk/gcc/ChangeLog
Fixed for 4.6.0.
Subject: Bug 44763 Author: ebotcazou Date: Thu Sep 23 13:05:39 2010 New Revision: 164562 URL: http://gcc.gnu.org/viewcvs?root=gcc&view=rev&rev=164562 Log: PR middle-end/44763 * ira-color.c (SORTGT): New macro, helper for qsort callbacks. (allocno_priority_compare_func): Use it instead of a straight difference computation over priorities. Modified: branches/gcc-4_5-branch/gcc/ChangeLog branches/gcc-4_5-branch/gcc/ira-color.c
Subject: Bug 44763 Author: ebotcazou Date: Thu Sep 23 13:07:01 2010 New Revision: 164563 URL: http://gcc.gnu.org/viewcvs?root=gcc&view=rev&rev=164563 Log: PR middle-end/44763 * ira-color.c (SORTGT): New macro, helper for qsort callbacks. (allocno_priority_compare_func): Use it instead of a straight difference computation over priorities. Modified: branches/gcc-4_4-branch/gcc/ChangeLog branches/gcc-4_4-branch/gcc/ira-color.c
Fixed everywhere.