This is the mail archive of the gcc-bugs@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]

[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


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;
}


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]