Author: Alan Zhao Date: 2022-09-28T09:48:00-07:00 New Revision: 6f2b34789541ff95d7f339eac5dc031d29655a58
URL: https://github.com/llvm/llvm-project/commit/6f2b34789541ff95d7f339eac5dc031d29655a58 DIFF: https://github.com/llvm/llvm-project/commit/6f2b34789541ff95d7f339eac5dc031d29655a58.diff LOG: Add missing `struct` keyword to the test p2-2.cpp While working on D53847, I noticed that this test would fail once we started recognizing the types in the modified `export` statement [0]. The tests would fail because Clang would emit a "declaration does not declare anything" diagnostic instead of the expected namespace scope diagnostic. I believe that the test is currently incorrectly passing because Clang doesn't parse the type and therefore doesn't treat the statement as a declaration. My understanding is that the intention of this test case is that it wants to export a `struct` type, which I believe requires a `struct` keyword, even for types with template parameters. With this change, the only error with these two statements should be the namespace scope issue. [0]: https://reviews.llvm.org/D53847?id=462032#inline-1297053 Reviewed By: erichkeane Differential Revision: https://reviews.llvm.org/D134578 Added: Modified: clang/test/CXX/module/module.interface/p2-2.cpp Removed: ################################################################################ diff --git a/clang/test/CXX/module/module.interface/p2-2.cpp b/clang/test/CXX/module/module.interface/p2-2.cpp index 359e068d230af..04904a8d86f27 100644 --- a/clang/test/CXX/module/module.interface/p2-2.cpp +++ b/clang/test/CXX/module/module.interface/p2-2.cpp @@ -14,7 +14,7 @@ struct X { U bar(); }; -export template <typename T> X<T>::iterator; // expected-error {{cannot export 'iterator' as it is not at namespace scope}} +export template <typename T> struct X<T>::iterator; // expected-error {{cannot export 'iterator' as it is not at namespace scope}} export template <typename T> void X<T>::foo(); // expected-error {{cannot export 'foo' as it is not at namespace scope}} export template <typename T> template <typename U> U X<T>::bar(); // expected-error {{cannot export 'bar' as it is not at namespace scope}} @@ -32,6 +32,6 @@ export void Y::foo(); // expected-error {{cannot export 'foo' export template <typename U> U Y::bar(); // expected-error {{cannot export 'bar' as it is not at namespace scope}} export { - template <typename T> X<T>::iterator; // expected-error {{cannot export 'iterator' as it is not at namespace scope}} - struct Y::iterator; // expected-error {{cannot export 'iterator' as it is not at namespace scope}} + template <typename T> struct X<T>::iterator; // expected-error {{cannot export 'iterator' as it is not at namespace scope}} + struct Y::iterator; // expected-error {{cannot export 'iterator' as it is not at namespace scope}} } _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits