This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.
Index Nav: | [Date Index] [Subject Index] [Author Index] [Thread Index] | |
---|---|---|
Message Nav: | [Date Prev] [Date Next] | [Thread Prev] [Thread Next] |
Other format: | [Raw text] |
Hello, Compiling a big proprietary Ada source base with gcc 4.5 on x86-solaris exposed misbehavior like received signal SIGSEGV, Segmentation fault. in allocno_priority_compare_func (v1p=0x21b0ce4, v2p=0x21b0cec) at ../../src/gcc/ira-color.c:1745 1745 pri1 = allocno_priorities[ALLOCNO_NUM (a1)]; Very similar to what was reported as PR/44763 on existing testcases. This turned out to be caused by a glitch with respect to possible overflows in allocno_priority_compare_func: << pri1 = allocno_priorities[ALLOCNO_NUM (a1)]; pri2 = allocno_priorities[ALLOCNO_NUM (a2)]; if (pri2 - pri1) return pri2 - pri1; >> The case we had ended up here with p2 = 247786560, p1 = -1982292480 so p2 > p1, but the function computed otherwise (p2-p1 = -2064888256). This, in turn, lead to inconsistencies in the ordering relationship, which the x86-solaris qsort implementation dislikes. The attached patch is a proposal to address this by replacing the difference computation by a comparison, factored out in a macro to allow reuse in other places (not in this patch) and provide a clean spot for a general comment. This fixed the observed SEGV with 4.5 and bootstrapped on i386-solaris. Was also bootstrapped and regression tested for mainline on both sparc-solaris and x86_64-linux. OK ? Thanks in advance, With Kind Regards, Olivier 2010-09-01 Olivier Hainque <hainque@adacore.com> * ira-color.c (SORTGT): New macro, helper for qsort callbacks. (allocno_priority_compare_func): Use it instead of a straight difference computation over priorities.
Attachment:
regsort.dif
Description: Text document
Index Nav: | [Date Index] [Subject Index] [Author Index] [Thread Index] | |
---|---|---|
Message Nav: | [Date Prev] [Date Next] | [Thread Prev] [Thread Next] |