Is this a compiler error?

walt wa1ter at myrealbox.com
Fri Oct 5 13:54:00 PDT 2007


On Fri, 5 Oct 2007, Matthew Dillon wrote:

>
> :While trying to build pkgsrc/emacs on HEAD with the default gcc41 I'm
> :getting an error that just doesn't make sense.  This is taken from
> :'dragonfly.h' in the emacs sources:
> :
> :#if defined(__GNUC__) && __GNUC__ == 3 && __GNUC_MINOR__ == 4
> :#  ifndef DFLY_PRE_17_CRT
> :#define START_FILES pre-crt0.o /usr/lib/gcc34/crt1.o /usr/lib/gcc34/crti.o /usr/lib/gcc34/crtbegin.o
> :#define LIB_STANDARD -L/usr/lib/gcc34 -lgcc -lc -lgcc /usr/lib/gcc34/crtend.o /usr/lib/gcc34/crtn.o
> :#  else
> :#define START_FILES pre-crt0.o /usr/lib/crt1.o /usr/lib/crti.o /usr/lib/crtbegin.o
> :#define LIB_STANDARD -L/usr/lib/gcc34 -lgcc -lc -lgcc /usr/lib/crtend.o /usr/lib/crtn.o
> :#  endif
> :#else
> :#error "Add compiler version magic"
> :#endif
> :
> :The problem is that 'error' is triggered no matter what that first 'if'
> :checks for.  E.g. that first line can be changed to #if 0 and that same
> :'error' is still triggered.
> :
> :Either gcc41 is broken or I am.  Which is it?

>     ...
>     The conditionals simply do not check for gcc 4.1.  It is only checking
>     for gcc 3.4, not finding it, and throwing up its hands.

Yes, I completely misunderstood the intentions of the programmer who wrote
that test.  I'm asked to supply the missing info, and this is my attempt:

#else
#define START_FILES pre-crt0.o /usr/lib/gcc41/crt1.o /usr/lib/gcc41/crti.o /usr/lib/gcc41/crtbegin.o
#define LIB_STANDARD -L/usr/lib/gcc41 -lgcc -lc -lgcc /usr/lib/gcc41/crtend.o /usr/lib/gcc41/crtn.o
#endif

However, here is yet another twist to my tale.  The pkgsrc top-level
Makefile.common for emacs includes this test:

. if ${OPSYS} == "DragonFly" && exists(/usr/lib/crtbegin.o)
CPPFLAGS+=      -DDFLY_PRE_17_CRT
. endif

I notice that all of my /usr/lib/crt*.o files were built in January,
while all the other files were built yesterday.  This makes me
suspect that those files from January probably should be deleted
because they cause the CPPFLAGS to be wrong for gcc41 (I think).





More information about the Bugs mailing list