This is the mail archive of the
gcc-bugs@gcc.gnu.org
mailing list for the GCC project.
[Bug rtl-optimization/53278] [4.8 regression] internal compiler error: in df_uses_record, at df-scan.c:3179 when compiling libgcc2.c __mulvdi3 on armv5tel-linux
- From: "ramana at gcc dot gnu.org" <gcc-bugzilla at gcc dot gnu dot org>
- To: gcc-bugs at gcc dot gnu dot org
- Date: Tue, 08 May 2012 14:03:37 +0000
- Subject: [Bug rtl-optimization/53278] [4.8 regression] internal compiler error: in df_uses_record, at df-scan.c:3179 when compiling libgcc2.c __mulvdi3 on armv5tel-linux
- Auto-submitted: auto-generated
- References: <bug-53278-4@http.gcc.gnu.org/bugzilla/>
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=53278
Ramana Radhakrishnan <ramana at gcc dot gnu.org> changed:
What |Removed |Added
----------------------------------------------------------------------------
CC| |ramana at gcc dot gnu.org
Component|bootstrap |rtl-optimization
--- Comment #2 from Ramana Radhakrishnan <ramana at gcc dot gnu.org> 2012-05-08 14:03:37 UTC ---
Here's a reduced testcase from newlib where I hit the same issue.
struct _reent
{
int _errno;
};
typedef unsigned int wchar_t;
unsigned long long
_wcstoull_r(struct _reent *rptr , const wchar_t *nptr , wchar_t **endptr , int
base)
{
register const wchar_t *s = nptr;
register unsigned long long acc;
register int c;
register unsigned long long cutoff;
register int neg = 0, any, cutlim;
if(base < 0
|| base == 1
|| base > 36) {
return(0ULL);
}
if ((base == 0 || base == 16) &&
c == L'0' && (*s == L'x' || *s == L'X')) {
c = s[1];
}
if (base == 0)
base = c == L'0' ? 8 : 10;
cutoff = (unsigned long long)(9223372036854775807LL * 2ULL + 1ULL) / (unsigned
long long)base;
for (acc = 0, any = 0;; c = *s++) {
if (iswdigit(c))
break;
if (any < 0 || acc > cutoff || (acc == cutoff && c > cutlim))
any = -1;
else {
acc += c;
}
}
if (any < 0) {
rptr->_errno = 34;
} else if (neg)
acc = -acc;
}