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( _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits