aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gcc/cp/parser.c3
-rw-r--r--gcc/testsuite/g++.dg/warn/forward-inner.C9
2 files changed, 10 insertions, 2 deletions
diff --git a/gcc/cp/parser.c b/gcc/cp/parser.c
index 69839ba..815582c 100644
--- a/gcc/cp/parser.c
+++ b/gcc/cp/parser.c
@@ -18953,7 +18953,8 @@ cp_parser_elaborated_type_specifier (cp_parser* parser,
here. */
if (cp_lexer_next_token_is (parser->lexer, CPP_SEMICOLON)
- && !is_friend && !processing_explicit_instantiation)
+ && !is_friend && is_declaration
+ && !processing_explicit_instantiation)
warning (0, "declaration %qD does not declare anything", decl);
type = TREE_TYPE (decl);
diff --git a/gcc/testsuite/g++.dg/warn/forward-inner.C b/gcc/testsuite/g++.dg/warn/forward-inner.C
index 5336d4e..d7b93f8 100644
--- a/gcc/testsuite/g++.dg/warn/forward-inner.C
+++ b/gcc/testsuite/g++.dg/warn/forward-inner.C
@@ -70,7 +70,7 @@ template class TC6<int>::TC7; // Valid explicit instantiation, no warning
// Verify that friend declarations, also easy to confuse with forward
-// declrations, are similarly not warned about.
+// declarations, are similarly not warned about.
class C8 {
public:
class C9 { };
@@ -79,3 +79,10 @@ class C10 {
public:
friend class C8::C9; // Valid friend declaration, no warning
};
+
+#if __cplusplus >= 201103L
+// Verify that alias-declarations using an elaborated-type-specifier and
+// nested-name-specifier are not warned about (PR c++/66159).
+struct C11;
+using A1 = struct ::C11; // Valid alias-decl, no warning
+#endif