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

            Bug ID: 108644
           Summary: Format string warnings related to longs under
                    MigW-W64/MSYS2 on Windows 10
           Product: gcc
           Version: 13.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: other
          Assignee: unassigned at gcc dot gnu.org
          Reporter: jdx at o2 dot pl
  Target Milestone: ---
              Host: x86_64-w64-mingw32
             Build: x86_64-w64-mingw32

Below are three excerpts from my gcc's build log. I believe that all these
warnings are caused by the fact that on Windows (at least x86_64 Win 10, but
AFAIR it applies to all versions) sizeof(long) = 4. The warnings do not appear
on a x86_64 Linux, where sizeof(long) = 8. I think that some of the warnings
could be fixed by using size_t and %zu format string instead of long and %l.



make[3]: Entering directory '/d/Works/xcomp/gcc-build/lto-plugin'
/bin/sh ./libtool  --tag=CC --tag=disable-static  --mode=compile gcc
-DHAVE_CONFIG_H -I. -I../../../gcc/lto-plugin 
-I../../../gcc/lto-plugin/../include -DHAVE_CONFIG_H  -Wall 
-DBASE_VERSION='"13.0.1"' -g -O2 -c -o lto-plugin.lo
../../../gcc/lto-plugin/lto-plugin.c
libtool: compile:  gcc -DHAVE_CONFIG_H -I. -I../../../gcc/lto-plugin
-I../../../gcc/lto-plugin/../include -DHAVE_CONFIG_H -Wall
-DBASE_VERSION=\"13.0.1\" -g -O2 -c ../../../gcc/lto-plugin/lto-plugin.c 
-DDLL_EXPORT -DPIC -o .libs/lto-plugin.o
../../../gcc/lto-plugin/lto-plugin.c: In function 'dump_symtab':
../../../gcc/lto-plugin/lto-plugin.c:501:19: warning: 'I' flag used with '%x'
gnu_printf format [-Wformat=]
  501 |       fprintf (f, "%u %" PRI_LL "x %s %s\n",
      |                   ^~~~~~
../../../gcc/lto-plugin/lto-plugin.c:501:34: note: format string is defined
here
  501 |       fprintf (f, "%u %" PRI_LL "x %s %s\n",
      |                                  ^
../../../gcc/lto-plugin/lto-plugin.c:501:19: warning: format '%x' expects
argument of type 'unsigned int', but argument 4 has type 'long long unsigned
int' [-Wformat=]
  501 |       fprintf (f, "%u %" PRI_LL "x %s %s\n",
      |                   ^~~~~~
  502 |                (unsigned int) slot, symtab->aux[j].id,
      |                                     ~~~~~~~~~~~~~~~~~
      |                                                   |
      |                                                   long long unsigned
int
../../../gcc/lto-plugin/lto-plugin.c:501:34: note: format string is defined
here
  501 |       fprintf (f, "%u %" PRI_LL "x %s %s\n",
      |                       ~~~~~~~~~~~^
      |                                  |
      |                                  unsigned int
      |                       %" PRI_LL "llx
../../../gcc/lto-plugin/lto-plugin.c: In function 'process_symtab':
../../../gcc/lto-plugin/lto-plugin.c:1088:16: warning: 'I' flag used with '%x'
gnu_scanf format [-Wformat=]
 1088 |     sscanf (s, ".%" PRI_LL "x", &obj->out->id);
      |                ^~~~
../../../gcc/lto-plugin/lto-plugin.c:1088:29: note: format string is defined
here
 1088 |     sscanf (s, ".%" PRI_LL "x", &obj->out->id);
      |                             ^
../../../gcc/lto-plugin/lto-plugin.c:1088:16: warning: format '%x' expects
argument of type 'unsigned int *', but argument 3 has type 'long long unsigned
int *' [-Wformat=]
 1088 |     sscanf (s, ".%" PRI_LL "x", &obj->out->id);
      |                ^~~~             ~~~~~~~~~~~~~
      |                                 |
      |                                 long long unsigned int *
../../../gcc/lto-plugin/lto-plugin.c:1088:29: note: format string is defined
here
 1088 |     sscanf (s, ".%" PRI_LL "x", &obj->out->id);
      |                  ~~~~~~~~~~~^
      |                             |
      |                             unsigned int *
      |                  %" PRI_LL "llx
../../../gcc/lto-plugin/lto-plugin.c: In function 'process_symtab_extension':
../../../gcc/lto-plugin/lto-plugin.c:1140:16: warning: 'I' flag used with '%x'
gnu_scanf format [-Wformat=]
 1140 |     sscanf (s, ".%" PRI_LL "x", &obj->out->id);
      |                ^~~~
../../../gcc/lto-plugin/lto-plugin.c:1140:29: note: format string is defined
here
 1140 |     sscanf (s, ".%" PRI_LL "x", &obj->out->id);
      |                             ^
../../../gcc/lto-plugin/lto-plugin.c:1140:16: warning: format '%x' expects
argument of type 'unsigned int *', but argument 3 has type 'long long unsigned
int *' [-Wformat=]
 1140 |     sscanf (s, ".%" PRI_LL "x", &obj->out->id);
      |                ^~~~             ~~~~~~~~~~~~~
      |                                 |
      |                                 long long unsigned int *
../../../gcc/lto-plugin/lto-plugin.c:1140:29: note: format string is defined
here
 1140 |     sscanf (s, ".%" PRI_LL "x", &obj->out->id);
      |                  ~~~~~~~~~~~^
      |                             |
      |                             unsigned int *
      |                  %" PRI_LL "llx







g++  -fno-PIE -c   -g -O2     -DIN_GCC -fPIC -DCROSS_DIRECTORY_STRUCTURE  
-fno-exceptions -fno-rtti -fasynchronous-unwind-tables -W -Wall -Wno-narrowing
-Wwrite-strings -Wcast-qual -Wmissing-format-attribute
-Wconditionally-supported -Woverloaded-virtual -pedantic -Wno-long-long
-Wno-variadic-macros -Wno-overlength-strings   -DHAVE_CONFIG_H -I. -I.
-I../../../gcc/gcc -I../../../gcc/gcc/. -I../../../gcc/gcc/../include 
-I../../../gcc/gcc/../libcpp/include -I../../../gcc/gcc/../libcody 
-I../../../gcc/gcc/../libdecnumber -I../../../gcc/gcc/../libdecnumber/dpd
-I../libdecnumber -I../../../gcc/gcc/../libbacktrace   -o ira-conflicts.o -MT
ira-conflicts.o -MMD -MP -MF ./.deps/ira-conflicts.TPo
../../../gcc/gcc/ira-conflicts.cc
../../../gcc/gcc/ira-conflicts.cc: In function 'bool
build_conflict_bit_table()':
../../../gcc/gcc/ira-conflicts.cc:153:25: warning: format '%ld' expects
argument of type 'long int', but argument 3 has type 'long long unsigned int'
[-Wformat=]
  153 |        "+++Allocating %ld bytes for conflict table (uncompressed size
%ld)\n",
      |                       ~~^
      |                         |
      |                         long int
      |                       %lld
  154 |        (long) allocated_words_num * sizeof (IRA_INT_TYPE),
      |        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
      |                                   |
      |                                   long long unsigned int
../../../gcc/gcc/ira-conflicts.cc:153:73: warning: format '%ld' expects
argument of type 'long int', but argument 4 has type 'long long unsigned int'
[-Wformat=]
  153 |        "+++Allocating %ld bytes for conflict table (uncompressed size
%ld)\n",
      |                                                                      
~~^
      |                                                                        
|
      |                                                                        
long int
      |                                                                      
%lld
  154 |        (long) allocated_words_num * sizeof (IRA_INT_TYPE),
  155 |        (long) object_set_words * ira_objects_num * sizeof
(IRA_INT_TYPE));
      |       
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
      |                                                  |
      |                                                  long long unsigned int







g++  -fno-PIE -c   -g -O2     -DIN_GCC -fPIC -DCROSS_DIRECTORY_STRUCTURE  
-fno-exceptions -fno-rtti -fasynchronous-unwind-tables -W -Wall -Wno-narrowing
-Wwrite-strings -Wcast-qual -Wmissing-format-attribute
-Wconditionally-supported -Woverloaded-virtual -pedantic -Wno-long-long
-Wno-variadic-macros -Wno-overlength-strings   -DHAVE_CONFIG_H -I. -I.
-I../../../gcc/gcc -I../../../gcc/gcc/. -I../../../gcc/gcc/../include 
-I../../../gcc/gcc/../libcpp/include -I../../../gcc/gcc/../libcody 
-I../../../gcc/gcc/../libdecnumber -I../../../gcc/gcc/../libdecnumber/dpd
-I../libdecnumber -I../../../gcc/gcc/../libbacktrace   -o h8300.o -MT h8300.o
-MMD -MP -MF ./.deps/h8300.TPo ../../../gcc/gcc/config/h8300/h8300.cc
../../../gcc/gcc/config/h8300/h8300.cc: In function 'void
h8300_print_operand(FILE*, rtx, int)':
../../../gcc/gcc/config/h8300/h8300.cc:1447:26: warning: format '%ld' expects
argument of type 'long int', but argument 3 has type 'long long int'
[-Wformat=]
 1447 |           fprintf (file, "#%ld", (-INTVAL (x)) & 0xff);
      |                          ^~~~~~  ~~~~~~~~~~~~~~~~~~~~
      |                                                |
      |                                                long long int
../../../gcc/gcc/config/h8300/h8300.cc:1460:26: warning: format '%ld' expects
argument of type 'long int', but argument 3 has type 'long long int'
[-Wformat=]
 1460 |           fprintf (file, "#%ld", ((-INTVAL (x)) & 0xff00) >> 8);
      |                          ^~~~~~  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
      |                                                           |
      |                                                           long long int
../../../gcc/gcc/config/h8300/h8300.cc:1468:22: warning: format '%ld' expects
argument of type 'long int', but argument 3 has type 'long long int'
[-Wformat=]
 1468 |       fprintf (file, "#%ld", 0xff & (-INTVAL (x)));
      |                      ^~~~~~  ~~~~~~~~~~~~~~~~~~~~
      |                                   |
      |                                   long long int
../../../gcc/gcc/config/h8300/h8300.cc:1545:26: warning: format '%ld' expects
argument of type 'long int', but argument 3 has type 'long long int'
[-Wformat=]
 1545 |           fprintf (file, "#%ld", ((INTVAL (x) >> 16) & 0xffff));
      |                          ^~~~~~  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
      |                                                      |
      |                                                      long long int
../../../gcc/gcc/config/h8300/h8300.cc:1570:26: warning: format '%ld' expects
argument of type 'long int', but argument 3 has type 'long long int'
[-Wformat=]
 1570 |           fprintf (file, "#%ld", INTVAL (x) & 0xffff);
      |                          ^~~~~~
../../../gcc/gcc/config/h8300/h8300.cc:1624:24: warning: format '%ld' expects
argument of type 'long int', but argument 3 has type 'long long int'
[-Wformat=]
 1624 |         fprintf (file, "#%ld", (INTVAL (x)) & 0xff);
      |                        ^~~~~~  ~~~~~~~~~~~~~~~~~~~
      |                                             |
      |                                             long long int
../../../gcc/gcc/config/h8300/h8300.cc:1632:24: warning: format '%ld' expects
argument of type 'long int', but argument 3 has type 'long long int'
[-Wformat=]
 1632 |         fprintf (file, "#%ld", (INTVAL (x) >> 8) & 0xff);
      |                        ^~~~~~  ~~~~~~~~~~~~~~~~~~~~~~~~
      |                                                  |
      |                                                  long long int
../../../gcc/gcc/config/h8300/h8300.cc:1640:24: warning: format '%ld' expects
argument of type 'long int', but argument 3 has type 'long long int'
[-Wformat=]
 1640 |         fprintf (file, "#%ld", INTVAL (x) & 0xff);
      |                        ^~~~~~
../../../gcc/gcc/config/h8300/h8300.cc:1648:24: warning: format '%ld' expects
argument of type 'long int', but argument 3 has type 'long long int'
[-Wformat=]
 1648 |         fprintf (file, "#%ld", (INTVAL (x) >> 8) & 0xff);
      |                        ^~~~~~  ~~~~~~~~~~~~~~~~~~~~~~~~
      |                                                  |
      |                                                  long long int
../../../gcc/gcc/config/h8300/h8300.cc:1656:24: warning: format '%ld' expects
argument of type 'long int', but argument 3 has type 'long long int'
[-Wformat=]
 1656 |         fprintf (file, "#%ld", (INTVAL (x) >> 16) & 0xff);
      |                        ^~~~~~  ~~~~~~~~~~~~~~~~~~~~~~~~~
      |                                                   |
      |                                                   long long int
../../../gcc/gcc/config/h8300/h8300.cc:1664:24: warning: format '%ld' expects
argument of type 'long int', but argument 3 has type 'long long int'
[-Wformat=]
 1664 |         fprintf (file, "#%ld", (INTVAL (x) >> 24) & 0xff);
      |                        ^~~~~~  ~~~~~~~~~~~~~~~~~~~~~~~~~
      |                                                   |
      |                                                   long long int

Reply via email to