http://gcc.gnu.org/bugzilla/show_bug.cgi?id=55743



             Bug #: 55743

           Summary: limits.h included unnecessarily in libgcc2.c - can

                    break --without-headers bootstrap

    Classification: Unclassified

           Product: gcc

           Version: 4.7.2

            Status: UNCONFIRMED

          Severity: normal

          Priority: P3

         Component: libgcc

        AssignedTo: unassig...@gcc.gnu.org

        ReportedBy: woo...@wookware.org





The offending code is three very similar function in libgcc2.c around 1733:

#if defined(L_fixunsxfsi) && LIBGCC2_HAS_XF_MODE

/* Reenable the normal types, in case limits.h needs them. */

#undef char

#undef short

#undef int

#undef long

#undef unsigned

#undef float

#undef double

#undef MIN

#undef MAX

#include <limits.h>



UWtype

__fixunsxfSI (XFtype a)

{

  if (a >= - (DFtype) Wtype_MIN)

    return (Wtype) (a + Wtype_MIN) - Wtype_MIN;

  return (Wtype) a;

}

#endif



That inclusion of limits.h was there because the function __fixunsxfSI used to

use LONG_MIN from that headers file, but this was changed a while back

(http://repo.or.cz/w/official-gcc.git/blobdiff/49f0f270673c4512c11f72a038b84c321ae5534a..7429c938827aa98bf3b02c4ac89510f4d28ef0b1:/gcc/libgcc2.c)

to use Wtype_MIN instead, which is defined in the local libgcc2.h header.



so in fact the limits.h inclusion is no longer needed.



And having it there can cause problems because if this file is built during a

stage1 bootstrap configured with --without-headers (before glibc headers are

available), then the include finds limits.h in the includes-fixed dir and thus

limits.h on the build machine (via #include_next) (which tries to bring in

bits/predefs.h of the wrong architecture), or at least it does in the

Debian/Ubuntu toolchain packaging. This is no doubt wrong too, and other

changes should probably be made, but simply removing the unnecessary limits.h

including fixes the issue for me and seems correct.



Distro-specific details are given in bugs

http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=696267 and

https://bugs.launchpad.net/debian/+source/gcc-4.7/+bug/1091823



The patch was generated against 4.7.2 but the issue is still present in trunk.

Reply via email to