[clang] 78e4897 - [NFC] [C++20] [Modules] Add a test for pr60085

Chuanqi Xu via cfe-commits cfe-commits at lists.llvm.org
Wed Mar 8 00:42:17 PST 2023


Author: Chuanqi Xu
Date: 2023-03-08T16:40:22+08:00
New Revision: 78e48977a6e67eaf6cea64e955e67edb0a55c993

URL: https://github.com/llvm/llvm-project/commit/78e48977a6e67eaf6cea64e955e67edb0a55c993
DIFF: https://github.com/llvm/llvm-project/commit/78e48977a6e67eaf6cea64e955e67edb0a55c993.diff

LOG: [NFC] [C++20] [Modules] Add a test for pr60085

Close https://github.com/llvm/llvm-project/issues/60085

When I look into pr60085, I finf the issue gone away now surprisingly.
Leave a test for this to prevent it happen again.

Added: 
    clang/test/Modules/pr60085.cppm

Modified: 
    

Removed: 
    


################################################################################
diff  --git a/clang/test/Modules/pr60085.cppm b/clang/test/Modules/pr60085.cppm
new file mode 100644
index 0000000000000..fba6012064047
--- /dev/null
+++ b/clang/test/Modules/pr60085.cppm
@@ -0,0 +1,98 @@
+// RUN: rm -rf %t
+// RUN: mkdir %t
+// RUN: split-file %s %t
+//
+// RUN: %clang_cc1 -std=c++20 -triple %itanium_abi_triple %t/d.cppm \
+// RUN:     -emit-module-interface -o %t/d.pcm
+// RUN: %clang_cc1 -std=c++20 -triple %itanium_abi_triple %t/c.cppm \
+// RUN:     -emit-module-interface -o %t/c.pcm -fmodule-file=%t/d.pcm
+// RUN: %clang_cc1 -std=c++20 -triple %itanium_abi_triple %t/b.cppm \
+// RUN:     -emit-module-interface -o %t/b.pcm -fmodule-file=%t/d.pcm
+// RUN: %clang_cc1 -std=c++20 -triple %itanium_abi_triple %t/a.cppm \
+// RUN:     -emit-module-interface -o %t/a.pcm -fmodule-file=%t/d.pcm \
+// RUN:     -fmodule-file=%t/c.pcm -fmodule-file=%t/b.pcm 
+// RUN: %clang_cc1 -std=c++20 -triple %itanium_abi_triple %t/a.pcm \
+// RUN:     -S -emit-llvm -disable-llvm-passes -o - | FileCheck %t/a.cppm
+//
+// Use -fmodule-file=<module-name>=<BMI-path>
+// RUN: %clang_cc1 -std=c++20 -triple %itanium_abi_triple %t/d.cppm \
+// RUN:     -emit-module-interface -o %t/d.pcm
+// RUN: %clang_cc1 -std=c++20 -triple %itanium_abi_triple %t/c.cppm \
+// RUN:     -emit-module-interface -o %t/c.pcm -fmodule-file=%t/d.pcm
+// RUN: %clang_cc1 -std=c++20 -triple %itanium_abi_triple %t/b.cppm \
+// RUN:     -emit-module-interface -o %t/b.pcm -fmodule-file=%t/d.pcm
+// RUN: %clang_cc1 -std=c++20 -triple %itanium_abi_triple %t/a.cppm \
+// RUN:     -emit-module-interface -o %t/a.pcm -fmodule-file=%t/d.pcm \
+// RUN:     -fmodule-file=%t/c.pcm -fmodule-file=%t/b.pcm 
+// RUN: %clang_cc1 -std=c++20 -triple %itanium_abi_triple %t/a.pcm \
+// RUN:     -S -emit-llvm -disable-llvm-passes -o - | FileCheck %t/a.cppm
+
+//--- d.cppm
+export module d;
+
+export template<typename>
+struct integer {
+	using type = int;
+	
+	static constexpr auto value() {
+		return 0;
+	}
+	
+	friend constexpr void f(integer const x) {
+		x.value();
+	}
+};
+
+export constexpr void ddd(auto const value) {
+	f(value);
+}
+
+
+template<typename T>
+constexpr auto dd = T();
+
+export template<typename T>
+constexpr auto d() {
+	dd<T>;
+}
+
+//--- c.cppm
+export module c;
+
+import d;
+
+template<typename T>
+auto cc = T();
+
+auto c() {
+	cc<integer<int>>;
+	integer<int>().value();
+}
+
+//--- b.cppm
+export module b;
+
+import d;
+
+auto b() {
+	integer<int>::type;
+}
+
+//--- a.cppm
+export module a;
+
+import b;
+import c;
+import d;
+
+constexpr void aa() {
+	d<integer<unsigned>>();
+	ddd(integer<int>());
+}
+
+export extern "C" void a() {
+	aa();
+}
+
+// Checks that we emit the IR successfully.
+// CHECK: define{{.*}}@a(


        


More information about the cfe-commits mailing list