65 lines · plain
1// https://github.com/llvm/llvm-project/issues/544572//3// RUN: rm -rf %t4// RUN: mkdir %t5// RUN: split-file %s %t6//7// RUN: %clang_cc1 -std=c++20 %t/A.cppm -verify -S -o -8// RUN: %clang_cc1 -std=c++20 %t/B.cppm -verify -S -o -9// RUN: %clang_cc1 -std=c++20 %t/C.cppm -emit-module-interface -o %t/C.pcm10// RUN: %clang_cc1 -std=c++20 %t/UseC.cppm -fprebuilt-module-path=%t -verify -S -o -11 12// RUN: %clang_cc1 -std=c++20 %t/C.cppm -emit-reduced-module-interface -o %t/C.pcm13// RUN: %clang_cc1 -std=c++20 %t/UseC.cppm -fprebuilt-module-path=%t -verify -S -o -14 15//--- A.cppm16// expected-no-diagnostics17export module A;18 19export template<typename T>20struct s {21 friend s f(s) {22 return s();23 }24};25 26void g() {27 f(s<int>());28}29 30//--- B.cppm31// expected-no-diagnostics32export module B;33 34export template<typename T>35struct s {36 friend constexpr auto f(s) -> s {37 return s();38 }39};40 41void g() {42 constexpr auto first = f(s<int>());43}44 45//--- C.cppm46// expected-no-diagnostics47export module C;48 49export template<typename StandardCharT, int N>50struct basic_symbol_text {51 template<int N2>52 constexpr friend basic_symbol_text operator+(53 const basic_symbol_text&, const basic_symbol_text<char, N2>&) noexcept54 {55 return basic_symbol_text{};56 }57};58 59constexpr auto xxx = basic_symbol_text<char, 1>{} + basic_symbol_text<char, 1>{};60 61//--- UseC.cppm62// expected-no-diagnostics63import C;64void foo() {}65