Commit 842901d0 by Marek Polacek Committed by Marek Polacek

PR c++/81429 - wrong parsing of constructor with C++11 attribute.

	* parser.c (cp_parser_constructor_declarator_p): Handle the scenario
	when a parameter declaration begins with [[attribute]].

	* g++.dg/cpp0x/gen-attrs-68.C: New test.
	* g++.dg/cpp0x/gen-attrs-69.C: New test.

From-SVN: r274181
parent c822ac7d
2019-08-07 Marek Polacek <polacek@redhat.com> 2019-08-07 Marek Polacek <polacek@redhat.com>
PR c++/81429 - wrong parsing of constructor with C++11 attribute.
* parser.c (cp_parser_constructor_declarator_p): Handle the scenario
when a parameter declaration begins with [[attribute]].
2019-08-07 Marek Polacek <polacek@redhat.com>
PR c++/91346 - Implement P1668R1, allow unevaluated asm in constexpr. PR c++/91346 - Implement P1668R1, allow unevaluated asm in constexpr.
* constexpr.c (cxx_eval_constant_expression): Handle ASM_EXPR. * constexpr.c (cxx_eval_constant_expression): Handle ASM_EXPR.
(potential_constant_expression_1) <case ASM_EXPR>: Allow. (potential_constant_expression_1) <case ASM_EXPR>: Allow.
......
...@@ -27857,7 +27857,9 @@ cp_parser_constructor_declarator_p (cp_parser *parser, cp_parser_flags flags, ...@@ -27857,7 +27857,9 @@ cp_parser_constructor_declarator_p (cp_parser *parser, cp_parser_flags flags,
/* A parameter declaration begins with a decl-specifier, /* A parameter declaration begins with a decl-specifier,
which is either the "attribute" keyword, a storage class which is either the "attribute" keyword, a storage class
specifier, or (usually) a type-specifier. */ specifier, or (usually) a type-specifier. */
&& !cp_lexer_next_token_is_decl_specifier_keyword (parser->lexer)) && !cp_lexer_next_token_is_decl_specifier_keyword (parser->lexer)
/* A parameter declaration can also begin with [[attribute]]. */
&& !cp_next_tokens_can_be_std_attribute_p (parser))
{ {
tree type; tree type;
tree pushed_scope = NULL_TREE; tree pushed_scope = NULL_TREE;
2019-08-07 Marek Polacek <polacek@redhat.com> 2019-08-07 Marek Polacek <polacek@redhat.com>
PR c++/81429 - wrong parsing of constructor with C++11 attribute.
* g++.dg/cpp0x/gen-attrs-68.C: New test.
* g++.dg/cpp0x/gen-attrs-69.C: New test.
2019-08-07 Marek Polacek <polacek@redhat.com>
PR c++/91346 - Implement P1668R1, allow unevaluated asm in constexpr. PR c++/91346 - Implement P1668R1, allow unevaluated asm in constexpr.
* g++.dg/cpp2a/inline-asm1.C: New test. * g++.dg/cpp2a/inline-asm1.C: New test.
* g++.dg/cpp2a/inline-asm2.C: New test. * g++.dg/cpp2a/inline-asm2.C: New test.
......
// PR c++/81429 - wrong parsing of constructor with C++11 attribute.
// { dg-do compile { target c++11 } }
// { dg-additional-options "-Wunused-parameter -Wno-pedantic" }
void fn1([[maybe_unused]] int a) { }
void fn2(int a [[maybe_unused]]) { }
void fn3(__attribute__((unused)) int a) { }
void fn4(int a __attribute__((unused))) { }
struct S1 {
S1([[maybe_unused]] int a) { }
};
struct S2 {
S2([[maybe_unused]] int f, [[maybe_unused]] int a) { }
};
struct S3 {
S3(int a [[maybe_unused]]) { }
};
struct S4 {
S4(int f [[maybe_unused]], int a [[maybe_unused]]) { }
};
struct S5 {
S5(__attribute__((unused)) int a) { }
};
struct S6 {
S6(__attribute__((unused)) int f, __attribute__((unused)) int a) { }
};
struct S7 {
S7(int a __attribute__((unused))) { }
};
struct S8 {
S8(int f __attribute__((unused)), int a __attribute__((unused))) { }
};
// PR c++/81429 - wrong parsing of constructor with C++11 attribute.
// { dg-do compile { target c++11 } }
// { dg-additional-options "-Wno-pedantic" }
void fn1([[maybe_unused]] int);
void fn2(int a [[maybe_unused]]);
void fn3(__attribute__((unused)) int);
void fn4(int __attribute__((unused)));
struct S1 {
S1([[maybe_unused]] int);
};
struct S2 {
S2([[maybe_unused]] int, [[maybe_unused]] int);
};
struct S3 {
S3(int a [[maybe_unused]]);
};
struct S4 {
S4(int a [[maybe_unused]], int b [[maybe_unused]]);
};
struct S5 {
S5(__attribute__((unused)) int);
};
struct S6 {
S6(__attribute__((unused)) int, __attribute__((unused)) int);
};
struct S7 {
S7(int __attribute__((unused)));
};
struct S8 {
S8(int __attribute__((unused)), int __attribute__((unused)));
};
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment