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

            Bug ID: 77753
           Summary: [7 Regression] broken profiledbootstrap due to
                    -Werror=format-length in varasm.c:1573
           Product: gcc
           Version: 7.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: bootstrap
          Assignee: unassigned at gcc dot gnu.org
          Reporter: marxin at gcc dot gnu.org
  Target Milestone: ---

Running profiledbootstrap on a ppc64le machine:

../../gcc/varasm.c: In function ‘void
default_named_section_asm_out_destructor(rtx, int)’:
../../gcc/varasm.c:1573:1: error: ‘%.5u’ directive writing between 5 and 10
bytes into a region of size 9 [-Werror=format-length=]
 default_named_section_asm_out_destructor (rtx symbol, int priority)
 ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
../../gcc/varasm.c:1573:1: note: directive argument in the range [-2147418112,
2147483647]
../../gcc/varasm.c:1568:7: note: format output between 13 and 18 bytes into a
destination of size 16
     p);
       ^
../../gcc/varasm.c: In function ‘void
default_named_section_asm_out_constructor(rtx, int)’:
../../gcc/varasm.c:1596:1: error: ‘%.5u’ directive writing between 5 and 10
bytes into a region of size 9 [-Werror=format-length=]
 default_named_section_asm_out_constructor (rtx symbol, int priority)
 ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
../../gcc/varasm.c:1596:1: note: directive argument in the range [-2147418112,
2147483647]
../../gcc/varasm.c:1568:7: note: format output between 13 and 18 bytes into a
destination of size 16
     p);


code snippet:

  char buf[16];

  /* ??? This only works reliably with the GNU linker.  */
  sprintf (buf, "%s.%.5u",
           constructor_p ? ".ctors" : ".dtors",
           /* Invert the numbering so the linker puts us in the proper
              order; constructors are run from right to left, and the
              linker sorts in increasing order.  */
           MAX_INIT_PRIORITY - priority);

I'm wondering whether "%.5u" format (limiting output to 5 digits) is really
supported by sprintf?
If not, I guess we should either increase buffer size. Can sprintf format check
utilize VRP information?

Reply via email to