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

Reply via email to