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