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

Sergei Trofimovich <slyfox at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
                 CC|                            |ldv at sourceware dot org,
                   |                            |mark at gcc dot gnu.org,
                   |                            |slyfox at gcc dot gnu.org

--- Comment #14 from Sergei Trofimovich <slyfox at gcc dot gnu.org> ---
This generates warning on reasonably looking code.

On strace-6.9: https://github.com/strace/strace/blob/v6.9/src/print_utils.h#L16

  In file included from v4l2.c:40:
  print_utils.h:16:35: error: initializer-string for array of 'char' is too
long [-Werror=unterminated-string-initialization]
     16 | static const char hex_chars[16] = "0123456789abcdef";
        |                                   ^~~~~~~~~~~~~~~~~~

/cc Dmitry

On elfutils-0.191:
https://sourceware.org/git/?p=elfutils.git;a=blob;f=backends/x86_64_regs.c;h=ef987daf43f01187c468d29e4d412ecafdcb2878;hb=18a015c0b0787ba5acb39801ab7c17dac50f584d#l85

  x86_64_regs.c: In function 'x86_64_register_info':
  x86_64_regs.c:85:11: error: initializer-string for array of 'char' is too
long [-Werror=unterminated-string-initialization]
   85 |           "ax", "dx", "cx", "bx", "si", "di", "bp", "sp
      |           ^~~~

/cc Mark

I would say both uses are reasonable even if they strip trailing '\0'.

Warning-free code that does the equivalent might be a bit ugly:

    static const char hex_chars[17] = "0123456789abcdef"; // extra byte

or

    static const char hex_chars[16] = { '0', '1', ..., 'f' }; // lots of
boilerplate

WDYT of relaxing gcc warning a bit and not complain if the only thing it strips
is a '\0'? Otherwise at least strace and elfutils would have to adapt.

Reply via email to