From 2563ad8ef1a88907049715b582eb2342fd69cf89 Mon Sep 17 00:00:00 2001 From: Chuanqi Xu Date: Mon, 16 Jan 2023 15:08:14 +0800 Subject: [PATCH] [NFC] [Modules] Add test from PR60036 Although I failed to reproduce the problem in pr60036, it should be always good to have more tests. --- clang/test/Modules/pr60036.cppm | 103 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 103 insertions(+) create mode 100644 clang/test/Modules/pr60036.cppm diff --git a/clang/test/Modules/pr60036.cppm b/clang/test/Modules/pr60036.cppm new file mode 100644 index 0000000..187a68f --- /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 +struct a; + +template +struct a { + using type = char; +}; + +//--- b.cppm +export module b; + +import a; + +typename a::type; + +//--- c.cppm +export module c; + +import a; + +typename a::type; + +//--- d.cppm +export module d; + +export template +struct d { + d() {} + explicit d(int) requires(true) {} + d(auto &&) {} +}; + +//--- e.cppm +export module e; + +import d; + +auto r = d(); + +//--- f.cppm +export module f; + +import a; +import b; +import c; +import d; + +template +struct array { + friend void fr(array const &) { + } +}; + +array() -> array::type>; + +struct wrap { + d m; +}; + +template +int f1(T) { + return 1; +} + +void f2() { + d view; + int x = f1(view); + typename a::type; + wrap w; +} + +//--- g.cppm +// expected-no-diagnostics +export module g; + +import e; +import f; -- 2.7.4