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