blob: 32329d0e3e1c5b8f35dfbec61f6c4b46a099e05c [file] [log] [blame]
Richard Smith05ce1d32018-03-01 22:20:13 +00001// RUN: %clang_cc1 -fmodules -std=c++14 %s -verify
2// expected-no-diagnostics
3
4#pragma clang module build A
5module A {}
6#pragma clang module contents
7#pragma clang module begin A
8template<typename T> struct A {
9 friend A operator+(const A&, const A&) { return {}; }
Serge Pavlovacfcd782018-12-06 09:35:04 +000010 template<typename T2> friend void func_1(const A&, const T2 &) {}
Richard Smith05ce1d32018-03-01 22:20:13 +000011};
12#pragma clang module end
13#pragma clang module endbuild
14
15#pragma clang module build B
16module B {}
17#pragma clang module contents
18#pragma clang module begin B
19#pragma clang module import A
20inline void f() { A<int> a; }
21#pragma clang module end
22#pragma clang module endbuild
23
24#pragma clang module build C
25module C {}
26#pragma clang module contents
27#pragma clang module begin C
28#pragma clang module import A
29inline void g() { A<int> a; }
30#pragma clang module end
31#pragma clang module endbuild
32
33#pragma clang module import A
34#pragma clang module import B
35#pragma clang module import C
36
37void h() {
38 A<int> a;
39 a + a;
Serge Pavlovacfcd782018-12-06 09:35:04 +000040 func_1(a, 0);
Richard Smith05ce1d32018-03-01 22:20:13 +000041}