Hi!

THe following patch rejects invalid __attribute__ syntax where one or both
opening parens are missing, but it is accepted anyway.

Bootstrapped/regtested on x86_64-linux and i686-linux, ok for trunk?

2019-01-31  Jakub Jelinek  <ja...@redhat.com>

        PR c++/87175
        * parser.c (cp_parser_gnu_attributes_opt): Set ok to false
        if require_open failed.

        * g++.dg/ext/attrib57.C: New test.

--- gcc/cp/parser.c.jj  2019-01-28 23:29:40.719949614 +0100
+++ gcc/cp/parser.c     2019-01-31 10:16:22.653631278 +0100
@@ -25768,9 +25768,11 @@ cp_parser_gnu_attributes_opt (cp_parser*
       cp_lexer_consume_token (parser->lexer);
       /* Look for the two `(' tokens.  */
       matching_parens outer_parens;
-      outer_parens.require_open (parser);
+      if (!outer_parens.require_open (parser))
+       ok = false;
       matching_parens inner_parens;
-      inner_parens.require_open (parser);
+      if (!inner_parens.require_open (parser))
+       ok = false;
 
       /* Peek at the next token.  */
       token = cp_lexer_peek_token (parser->lexer);
--- gcc/testsuite/g++.dg/ext/attrib57.C.jj      2019-01-31 10:24:25.353702392 
+0100
+++ gcc/testsuite/g++.dg/ext/attrib57.C 2019-01-31 10:23:57.007170898 +0100
@@ -0,0 +1,6 @@
+// PR c++/87175
+// { dg-do compile }
+// { dg-options "" }
+
+struct __attribute__)) foo { };        // { dg-error "expected" }
+struct __attribute__()) bar { };// { dg-error "expected" }

        Jakub

Reply via email to