Bug 44763 - [4.4/4.5 regression] SEGV in allocno_priority_compare_func on Solaris 8
Summary: [4.4/4.5 regression] SEGV in allocno_priority_compare_func on Solaris 8
Status: RESOLVED FIXED
Alias: None
Product: gcc
Classification: Unclassified
Component: middle-end (show other bugs)
Version: 4.6.0
: P4 normal
Target Milestone: 4.4.5
Assignee: Not yet assigned to anyone
URL: http://gcc.gnu.org/ml/gcc-patches/201...
Keywords:
Depends on:
Blocks:
 
Reported: 2010-07-01 17:29 UTC by Rainer Orth
Modified: 2010-09-23 13:08 UTC (History)
3 users (show)

See Also:
Host: i386-pc-solaris2.8
Target: i386-pc-solaris2.8
Build: i386-pc-solaris2.8
Known to work: 3.4.6 4.6.0
Known to fail: 4.4.5 4.5.1
Last reconfirmed: 2010-09-02 09:26:04


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description Rainer Orth 2010-07-01 17:29:50 UTC
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
Comment 1 Rainer Orth 2010-07-16 13:52:54 UTC
This is a regression from GCC 3.4.6.
Comment 2 Eric Botcazou 2010-09-02 09:26:04 UTC
We ran into this on SPARC/Solaris 8 as well.
Comment 3 Rainer Orth 2010-09-16 16:37:19 UTC
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

Comment 4 Rainer Orth 2010-09-16 16:43:45 UTC
Fixed for 4.6.0.
Comment 5 Eric Botcazou 2010-09-23 13:05:54 UTC
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

Comment 6 Eric Botcazou 2010-09-23 13:07:18 UTC
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

Comment 7 Eric Botcazou 2010-09-23 13:08:16 UTC
Fixed everywhere.