summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--clang/lib/Parse/ParseDeclCXX.cpp2
-rw-r--r--clang/test/CXX/cpp/cpp.module/p2.cpp5
-rw-r--r--clang/test/Parser/cxx-class.cpp11
3 files changed, 15 insertions, 3 deletions
diff --git a/clang/lib/Parse/ParseDeclCXX.cpp b/clang/lib/Parse/ParseDeclCXX.cpp
index de481e88793..9159f4d6826 100644
--- a/clang/lib/Parse/ParseDeclCXX.cpp
+++ b/clang/lib/Parse/ParseDeclCXX.cpp
@@ -1248,9 +1248,11 @@ bool Parser::isValidAfterTypeSpecifier(bool CouldBeBitfield) {
case tok::ampamp: // struct foo {...} && R = ...
case tok::identifier: // struct foo {...} V ;
case tok::r_paren: //(struct foo {...} ) {4}
+ case tok::coloncolon: // struct foo {...} :: a::b;
case tok::annot_cxxscope: // struct foo {...} a:: b;
case tok::annot_typename: // struct foo {...} a ::b;
case tok::annot_template_id: // struct foo {...} a<int> ::b;
+ case tok::kw_decltype: // struct foo {...} decltype (a)::b;
case tok::l_paren: // struct foo {...} ( x);
case tok::comma: // __builtin_offsetof(struct foo{...} ,
case tok::kw_operator: // struct foo operator ++() {...}
diff --git a/clang/test/CXX/cpp/cpp.module/p2.cpp b/clang/test/CXX/cpp/cpp.module/p2.cpp
index ae68a508a02..d5bf4fa1a65 100644
--- a/clang/test/CXX/cpp/cpp.module/p2.cpp
+++ b/clang/test/CXX/cpp/cpp.module/p2.cpp
@@ -13,10 +13,9 @@ template<> struct import<0> {
};
// OK, not an import-declaration.
-// FIXME: This is valid, see PR41192
-struct A {} // FIXME expected-error {{expected ';'}}
+struct A {}
::import
-<empty.h>::a; // FIXME expected-error {{requires a type specifier}}
+<empty.h>::a;
// This is invalid: the tokens after 'import' are a header-name, so cannot be
// parsed as a template-argument-list.
diff --git a/clang/test/Parser/cxx-class.cpp b/clang/test/Parser/cxx-class.cpp
index 3cc006af23d..fe9c1ac95b4 100644
--- a/clang/test/Parser/cxx-class.cpp
+++ b/clang/test/Parser/cxx-class.cpp
@@ -272,6 +272,17 @@ class BadExceptionSpec {
));
};
+namespace PR41192 {
+extern struct A a;
+struct A {} ::PR41192::a; // ok, no missing ';' here expected-warning {{extra qualification}}
+
+#if __cplusplus >= 201103L
+struct C;
+struct D { static C c; };
+struct C {} decltype(D())::c; // expected-error {{'decltype' cannot be used to name a declaration}}
+#endif
+}
+
// PR11109 must appear at the end of the source file
class pr11109r3 { // expected-note{{to match this '{'}}
public // expected-error{{expected ':'}} expected-error{{expected '}'}} expected-error{{expected ';' after class}}
OpenPOWER on IntegriCloud