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));