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

            Bug ID: 117178
           Summary: -Wunterminated-string-initialization should ignore
                    trailing NUL byte for nonstring char arrays
           Product: gcc
           Version: 15.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: c
          Assignee: unassigned at gcc dot gnu.org
          Reporter: kees at outflux dot net
  Target Milestone: ---

The Linux kernel initializes many non-C-string char arrays with literals (e.g.
the ACPI tables have 4-character identifiers that are not NUL terminated).
While it would be possible to convert initializers from:
   { "BOOP", ... }
to:
   { { 'B', 'O', 'O', 'P' }, ... }
that is annoying.

It would be much better if -Wunterminated-string-initialization would stay
silent about char arrays marked with nonstring. For example, this should not
emit a diagnostic:

#include <stdio.h>

struct foo {
        char tag[4] __attribute__((nonstring));
        int a;
};

const struct foo instances[] = {
        { "ABCD", 4 },
};

int main(int argc, char *argv[])
{
        printf("%c\n", instances[0].tag[0]);
        return 0;
}

Reply via email to