diff mbox series

[committed] fix a logic error in attribute access validation (PR 93132)

Message ID e9916ffc-091a-37c3-a9aa-5758825bbd0f@gmail.com
State New
Headers show
Series [committed] fix a logic error in attribute access validation (PR 93132) | expand

Commit Message

Martin Sebor Jan. 10, 2020, 5:10 p.m. UTC
The attached patch corrects a logic error in the validation
of the new attribute access where the code incorrectly expects
the human readable representation of the attribute to match
the terse internal representation of the positional argument.

Committed in ra280124 after bootstrapping it and running
the testsuite with no regressions.

Martin
diff mbox series

Patch

PR c/93132 - bogus `attribute((access))' warning when size-index is specified

gcc/c-family/ChangeLog:

	PR c/93132
	* c-attribs.c (append_access_attrs): Validate against the translated
	access string rather than the human-readable representation.

gcc/testsuite/ChangeLog:

	PR c/93132
	* gcc.dg/attr-access-read-only-2.c: New test.

Index: gcc/c-family/c-attribs.c
===================================================================
--- gcc/c-family/c-attribs.c	(revision 280108)
+++ gcc/c-family/c-attribs.c	(working copy)
@@ -3970,14 +3970,15 @@  append_access_attrs (tree t, tree attrs, const cha
 	      return NULL_TREE;
 	    }
 
-	  if (n2 && strncmp (attrstr + n1 + 1, pos + n1, n2))
+	  if (n2 && strncmp (attrspec + n1 + 1, pos + n1, n2))
 	    {
 	      /* Mismatch in the value of the size argument.  */
 	      auto_diagnostic_group d;
 	      if (warning (OPT_Wattributes,
-			   "attribute %qs mismatch positional argument "
+			   "attribute %qs mismatched positional argument "
 			   "values %i and %i",
-			   attrstr, atoi (attrstr + n1 + 1), atoi (pos + n1))
+			   attrstr, atoi (attrspec + n1 + 1) + 1,
+			   atoi (pos + n1) + 1)
 		  && DECL_P (t))
 		inform (DECL_SOURCE_LOCATION (t),
 			"previous declaration here");
Index: gcc/testsuite/gcc.dg/attr-access-read-only-2.c
===================================================================
--- gcc/testsuite/gcc.dg/attr-access-read-only-2.c	(nonexistent)
+++ gcc/testsuite/gcc.dg/attr-access-read-only-2.c	(working copy)
@@ -0,0 +1,16 @@ 
+/* PR c/93132 - bogus 'attribute((access))' warning when size-index
+   is specified
+   { dg-do compile }
+   { dg-options "-Wall" } */
+
+void __attribute__ ((access (read_only, 1, 5)))
+f (void*, int, int, int, int);   // { dg-message "previous declaration" }
+
+void __attribute__ ((access (read_only, 1, 3)))
+f (void*, int, int, int, int);   // { dg-warning "attribute 'access\\\(read_only, 1, 3\\\)' mismatched positional argument values 3 and 5" }
+
+void __attribute__ ((access (read_only, 1, 4)))
+f (void*, int, int, int, int);   // { dg-warning "attribute 'access\\\(read_only, 1, 4\\\)' mismatched positional argument values 4 and 5" }
+
+void __attribute__ ((access (read_only, 1, 5)))
+f (void*, int, int, int, int);