summaryrefslogtreecommitdiffstats
path: root/clang/test
diff options
context:
space:
mode:
authorErich Keane <erich.keane@intel.com>2018-11-12 17:19:48 +0000
committerErich Keane <erich.keane@intel.com>2018-11-12 17:19:48 +0000
commit53f391dcb3232525513b9ee98469587895311c5a (patch)
treea47bbd964c3ff4ed70517ceea3a8e2e700cea493 /clang/test
parent9e1a0a749b406de3307d6c3bc6ea5810e120c530 (diff)
downloadbcm5719-llvm-53f391dcb3232525513b9ee98469587895311c5a.tar.gz
bcm5719-llvm-53f391dcb3232525513b9ee98469587895311c5a.zip
Implement P1094R2 (nested inline namespaces)
As approved for the Working Paper in San Diego, support annotating inline namespaces with 'inline'. Change-Id: I51a654e11ffb475bf27cccb2458768151619e384 llvm-svn: 346677
Diffstat (limited to 'clang/test')
-rw-r--r--clang/test/Parser/cxx2a-inline-nested-namespace-definition.cpp51
1 files changed, 51 insertions, 0 deletions
diff --git a/clang/test/Parser/cxx2a-inline-nested-namespace-definition.cpp b/clang/test/Parser/cxx2a-inline-nested-namespace-definition.cpp
new file mode 100644
index 00000000000..8e603d24c01
--- /dev/null
+++ b/clang/test/Parser/cxx2a-inline-nested-namespace-definition.cpp
@@ -0,0 +1,51 @@
+// RUN: %clang_cc1 -fsyntax-only -verify %s -std=c++14
+// RUN: %clang_cc1 -fsyntax-only -verify %s -std=c++17
+// RUN: %clang_cc1 -fsyntax-only -verify %s -std=c++2a -Wc++17-compat
+
+namespace inline foo1::foo2::foo3 { // expected-error {{expected identifier or '{'}} expected-error {{use of undeclared identifier 'foo1'}}
+}
+
+inline namespace foo4::foo5::foo6 { // expected-error {{nested namespace definition cannot be 'inline'}}}
+}
+
+#if __cplusplus <= 201402L
+// expected-warning@+7 {{nested namespace definition is a C++17 extension; define each namespace separately}}
+// expected-warning@+6 {{inline nested namespace definition is a C++2a extension}}
+#elif __cplusplus <= 201703L
+// expected-warning@+4 {{inline nested namespace definition is a C++2a extension}}
+#else
+// expected-warning@+2 {{inline nested namespace definition is incompatible with C++ standards before C++2a}}
+#endif
+namespace valid1::valid2::inline valid3::inline valid4::valid5{}
+// expected-note@-1 2 {{previous definition is here}}
+
+#if __cplusplus <= 201402L
+// expected-warning@+3 {{nested namespace definition is a C++17 extension; define each namespace separately}}
+#endif
+//expected-warning@+1 2 {{inline namespace reopened as a non-inline namespace}}
+namespace valid1::valid2::valid3::valid4::valid5{}
+
+#if __cplusplus <= 201402L
+// expected-warning@+7 {{nested namespace definition is a C++17 extension; define each namespace separately}}
+// expected-warning@+6 {{inline nested namespace definition is a C++2a extension}}
+#elif __cplusplus <= 201703L
+// expected-warning@+4 {{inline nested namespace definition is a C++2a extension}}
+#else
+// expected-warning@+2 {{inline nested namespace definition is incompatible with C++ standards before C++2a}}
+#endif
+namespace valid1::valid2::inline valid3::inline valid4::valid5{}
+// expected-note@-1 2 {{previous definition is here}}
+
+namespace valid1 {
+ namespace valid2 {
+//expected-warning@+1 {{inline namespace reopened as a non-inline namespace}}
+ namespace valid3 {
+//expected-warning@+1 {{inline namespace reopened as a non-inline namespace}}
+ namespace valid4 {
+ namespace valid5 {
+ }
+ }
+ }
+ }
+}
+
OpenPOWER on IntegriCloud