[clang] 2563ad8 - [NFC] [Modules] Add test from PR60036
Chuanqi Xu via cfe-commits
cfe-commits at lists.llvm.org
Sun Jan 15 23:09:10 PST 2023
Author: Chuanqi Xu
Date: 2023-01-16T15:08:16+08:00
New Revision: 2563ad8ef1a88907049715b582eb2342fd69cf89
URL: https://github.com/llvm/llvm-project/commit/2563ad8ef1a88907049715b582eb2342fd69cf89
DIFF: https://github.com/llvm/llvm-project/commit/2563ad8ef1a88907049715b582eb2342fd69cf89.diff
LOG: [NFC] [Modules] Add test from PR60036
Although I failed to reproduce the problem in pr60036, it should be
always good to have more tests.
Added:
clang/test/Modules/pr60036.cppm
Modified:
Removed:
################################################################################
diff --git a/clang/test/Modules/pr60036.cppm b/clang/test/Modules/pr60036.cppm
new file mode 100644
index 0000000000000..187a68f8733d0
--- /dev/null
+++ b/clang/test/Modules/pr60036.cppm
@@ -0,0 +1,103 @@
+// Test case from https://github.com/llvm/llvm-project/issues/60036
+//
+// RUN: rm -rf %t
+// RUN: mkdir -p %t
+// RUN: split-file %s %t
+//
+// RUN: %clang_cc1 -std=c++20 %t/a.cppm -emit-module-interface -o %t/a.pcm
+// RUN: %clang_cc1 -std=c++20 %t/b.cppm -emit-module-interface -fprebuilt-module-path=%t -o %t/b.pcm
+// RUN: %clang_cc1 -std=c++20 %t/c.cppm -emit-module-interface -fprebuilt-module-path=%t -o %t/c.pcm
+// RUN: %clang_cc1 -std=c++20 %t/d.cppm -emit-module-interface -fprebuilt-module-path=%t -o %t/d.pcm
+// RUN: %clang_cc1 -std=c++20 %t/e.cppm -emit-module-interface -fprebuilt-module-path=%t -o %t/e.pcm
+// RUN: %clang_cc1 -std=c++20 %t/f.cppm -emit-module-interface -fprebuilt-module-path=%t -o %t/f.pcm
+// RUN: %clang_cc1 -std=c++20 %t/g.cppm -fprebuilt-module-path=%t -verify -fsyntax-only
+//
+// Tests that the behavior is fine with specifying module file with `-fmodule-file`.
+// RUN: %clang_cc1 -std=c++20 %t/a.cppm -emit-module-interface -o %t/a.pcm
+// RUN: %clang_cc1 -std=c++20 %t/b.cppm -emit-module-interface -fmodule-file=%t/a.pcm -o %t/b.pcm
+// RUN: %clang_cc1 -std=c++20 %t/c.cppm -emit-module-interface -fmodule-file=%t/a.pcm -o %t/c.pcm
+// RUN: %clang_cc1 -std=c++20 %t/d.cppm -emit-module-interface -o %t/d.pcm
+// RUN: %clang_cc1 -std=c++20 %t/e.cppm -emit-module-interface -fmodule-file=%t/d.pcm -o %t/e.pcm
+// RUN: %clang_cc1 -std=c++20 %t/f.cppm -emit-module-interface -fmodule-file=%t/a.pcm -fmodule-file=%t/b.pcm -fmodule-file=%t/c.pcm -fmodule-file=%t/d.pcm -o %t/f.pcm
+// RUN: %clang_cc1 -std=c++20 %t/g.cppm -fmodule-file=%t/e.pcm -fmodule-file=%t/f.pcm -verify -fsyntax-only
+
+//--- a.cppm
+export module a;
+
+export template<typename>
+struct a;
+
+template<typename T>
+struct a<T &> {
+ using type = char;
+};
+
+//--- b.cppm
+export module b;
+
+import a;
+
+typename a<char &>::type;
+
+//--- c.cppm
+export module c;
+
+import a;
+
+typename a<char &>::type;
+
+//--- d.cppm
+export module d;
+
+export template<typename>
+struct d {
+ d() {}
+ explicit d(int) requires(true) {}
+ d(auto &&) {}
+};
+
+//--- e.cppm
+export module e;
+
+import d;
+
+auto r = d<int>();
+
+//--- f.cppm
+export module f;
+
+import a;
+import b;
+import c;
+import d;
+
+template<typename T>
+struct array {
+ friend void fr(array<T> const &) {
+ }
+};
+
+array() -> array<typename a<char &>::type>;
+
+struct wrap {
+ d<int> m;
+};
+
+template<typename T>
+int f1(T) {
+ return 1;
+}
+
+void f2() {
+ d<int> view;
+ int x = f1(view);
+ typename a<decltype([x]{}) &>::type;
+ wrap w;
+}
+
+//--- g.cppm
+// expected-no-diagnostics
+export module g;
+
+import e;
+import f;
More information about the cfe-commits
mailing list