diff clang/test/Modules/using-directive.cpp @ 150:1d019706d866

LLVM10
author anatofuz
date Thu, 13 Feb 2020 15:10:13 +0900
parents
children
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/clang/test/Modules/using-directive.cpp	Thu Feb 13 15:10:13 2020 +0900
@@ -0,0 +1,62 @@
+// RUN: %clang_cc1 -fmodules -fmodules-local-submodule-visibility -fno-modules-error-recovery -fno-spell-checking -verify %s
+
+#pragma clang module build a
+module a { explicit module b {} explicit module c {} }
+#pragma clang module contents
+
+#pragma clang module begin a.b
+namespace b { int n; }
+#pragma clang module end
+
+#pragma clang module begin a.c
+#pragma clang module import a.b
+namespace c { using namespace b; }
+#pragma clang module end
+
+#pragma clang module begin a
+#pragma clang module import a.c
+using namespace c;
+#pragma clang module end
+
+#pragma clang module endbuild
+
+#pragma clang module import a.b
+void use1() {
+  (void)n; // expected-error {{use of undeclared identifier}}
+  (void)::n; // expected-error {{no member named 'n' in the global namespace}}
+  (void)b::n;
+}
+namespace b {
+  void use1_in_b() { (void)n; }
+}
+namespace c {
+  void use1_in_c() { (void)n; } // expected-error {{use of undeclared identifier}}
+}
+
+#pragma clang module import a.c
+void use2() {
+  (void)n; // expected-error {{use of undeclared identifier}}
+  (void)::n; // expected-error {{no member named 'n' in the global namespace}}
+  (void)b::n;
+  (void)c::n;
+}
+namespace b {
+  void use2_in_b() { (void)n; }
+}
+namespace c {
+  void use2_in_c() { (void)n; }
+}
+
+#pragma clang module import a
+void use3() {
+  (void)n;
+  (void)::n;
+  (void)b::n;
+  (void)c::n;
+}
+namespace b {
+  void use3_in_b() { (void)n; }
+}
+namespace c {
+  void use3_in_c() { (void)n; }
+}