https://gcc.gnu.org/bugzilla/show_bug.cgi?id=126929

            Bug ID: 126929
           Summary: unclear behavior of -std=c90 for the preprocessor
           Product: gcc
           Version: 17.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: preprocessor
          Assignee: unassigned at gcc dot gnu.org
          Reporter: vincent-gcc at vinc17 dot net
  Target Milestone: ---

When I compile the following code

#include <limits.h>
#if ULONG_MAX >= 0xffffffffffffffff
#error "true"
#else
#error "false"
#endif

with "gcc -c -std=c90 -m32" under Linux x86_64, I get the error on #error
"false".

In ISO C90, the preprocessor arithmetic is long or unsigned long, so that with
the 32-bit ABI, the test ULONG_MAX >= ... would always be true, and I would
expect the error on #error "true".

It is not clear whether the obtained result is incorrect, i.e. whether the -std
option affects the preprocessor. The GCC man page and manual say that -std=
determines the language standard (or dialect). But the behavior of the
preprocessor is part of the language standard. So this should be fixed and/or
clarified.

Reply via email to