https://gcc.gnu.org/bugzilla/show_bug.cgi?id=119878
Bug ID: 119878 Summary: __builtin_has_attribute(VAR, nonstring) does not work on multidimensional arrays marked with nonstring 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: --- After fixing bug 118095, I discovered that `__builtin_has_attibute` needs to be updated similarly to how `-Wunterminated-string-initialization` was fixed in commit afb46540d392 ("c: Don't emit -Wunterminated-string-initialization warning for multi-dimensional nonstring array initializers [PR117178]"). This can be seen by updating the testsuite: diff --git a/gcc/testsuite/gcc.dg/attr-nonstring.c b/gcc/testsuite/gcc.dg/attr-nonstring.c index d93e93ca6766..c40762d41e11 100644 --- a/gcc/testsuite/gcc.dg/attr-nonstring.c +++ b/gcc/testsuite/gcc.dg/attr-nonstring.c @@ -121,3 +121,10 @@ int sprintf_nonstring_2 (char *d, NONSTRING const char *s) { return sprintf (d, s); /* { dg-regexp "\[^\n\r\]+: warning: .sprintf. argument 2 declared attribute .nonstring. \\\[-Wstringop-overread\[^\n\r\]*" "sprintf" } */ } + +static const char single[] = "ohai"; +_Static_assert (__builtin_has_attribute ((single, nonstring)); +static const char multi2[][4] = "hola"; +_Static_assert (__builtin_has_attribute ((multi2, nonstring)); +static const char multi3[][16][5] = "hello"; +_Static_assert (__builtin_has_attribute ((multi3, nonstring));