Run DCE after a LoopFlatten test to reduce spurious output [nfc]
[llvm-project.git] / clang / test / Modules / pr61317.cppm
blob4b54d26dc5a63bb05fcb11b04ef37fee0bd9c89b
1 // From https://github.com/llvm/llvm-project/issues/61317
2 // RUN: rm -rf %t
3 // RUN: mkdir -p %t
4 // RUN: split-file %s %t
5 //
6 // RUN: %clang_cc1 -std=c++20 %t/A.cppm -emit-module-interface -o %t/A.pcm
7 // RUN: %clang_cc1 -std=c++20 %t/B.cppm -emit-module-interface -o %t/B.pcm \
8 // RUN:     -fprebuilt-module-path=%t
9 // RUN: %clang_cc1 -std=c++20 %t/Use.cpp -fprebuilt-module-path=%t -fsyntax-only -verify
11 //--- foo.h
12 #ifndef _FOO
13 #define _FOO
15 template <typename T> struct Foo {
16   Foo(T f) {}
19 template <typename T> Foo(T&) -> Foo<T>;
21 struct Bar {
22   template <typename T>
23     requires requires { Foo{T()}; }
24   void baz() const {}
27 template <typename T> struct Foo2 {
28   Foo2(T f) {}
31 struct Bar2 {
32   template <typename T>
33     requires requires { Foo2{T()}; }
34   void baz2() const {}
37 #endif
39 //--- A.cppm
40 module;
41 #include "foo.h"
42 export module A;
43 export using ::Foo;
44 export using ::Bar;
45 export using ::Bar2;
47 //--- B.cppm
48 module;
49 #include "foo.h"
50 export module B;
51 export import A;
53 //--- Use.cpp
54 // expected-no-diagnostics
55 import A;
56 import B;
57 void use() {
58   Bar _; 
59   _.baz<int>();
61   Bar2 __; 
62   __.baz2<int>();