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

            Bug ID: 99791
           Summary: -Wno-system-headers hides enum range Warning
           Product: gcc
           Version: 10.2.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: c
          Assignee: unassigned at gcc dot gnu.org
          Reporter: listnothrow at gmail dot com
  Target Milestone: ---

Created attachment 50478
  --> https://gcc.gnu.org/bugzilla/attachment.cgi?id=50478&action=edit
glimits.h from gcc 10.2.0 (commit 99dee82307f1e163e150c9c810452979994047ce)

When setting enum values using system header defines 
like LONG_MAX or ULONG_MAX gcc won't complain about them being out of range of
int,
when compiling with -Wall -Wextra -pedantic

Using -Wsystem-headers will enable the warnings.

Using -save-temps will warn for LONG_MAX but not ULONG_MAX.

The bug can not be reproduced completely using -save-temps, 
(LONG_MAX doesn't get annotated as coming from a system header)
  I reckon that's a bug too.

To reproduce instead, I copied glimits.h (from gcc 10.2.0 see attached) 
to the system include folder.
I hope that's okay in this case.

%cat warn_enum.c
#include <glimits.h>

enum test {
        warns_on_save_tmps =  LONG_MAX,
        doesnt_warn = ULONG_MAX
};
int main(){ return 0; }

%gcc --version
gcc (GCC) 10.2.0
Copyright (C) 2020 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

%gcc -Wall -Wextra -pedantic warn_enum.c

%gcc -Wall -Wextra -pedantic -save-temps warn_enum.c
warn_enum.c:4:20: warning: ISO C restricts enumerator values to range of ‘int’
[-Wpedantic]
    4 |  warns_save_tmps =  LONG_MAX,
      |                    ^~~~~~~~~~  

%gcc -Wall -Wextra -pedantic -Wsystem-headers warn_enum.c
warn_enum.c:4:21: warning: ISO C restricts enumerator values to range of ‘int’
[-Wpedantic]
    4 |  warns_save_tmps =  LONG_MAX,
      |                     ^~~~~~~~
In file included from warn_enum.c:1:
warn_enum.c:5:16: warning: ISO C restricts enumerator values to range of ‘int’
[-Wpedantic]
    5 |  doesnt_warn = ULONG_MAX
      |

Reply via email to