Chuanqi Xu d0ce367a97 [C++20] [Modules] Fix a crash when instantiate hidden friends
Closes https://github.com/llvm/llvm-project/issues/54457.

This removes a FIXME we found previously. But we didn't remove the FIXME
that time due to the lack of the corresponding test. And now we found
the corresponding test so we can remove it.
2023-01-03 13:37:57 +08:00

62 lines
1.2 KiB
C++

// https://github.com/llvm/llvm-project/issues/54457
//
// RUN: rm -rf %t
// RUN: mkdir %t
// RUN: split-file %s %t
//
// RUN: %clang_cc1 -std=c++20 %t/A.cppm -verify -S -o -
// RUN: %clang_cc1 -std=c++20 %t/B.cppm -verify -S -o -
// RUN: %clang_cc1 -std=c++20 %t/C.cppm -emit-module-interface -o %t/C.pcm
// RUN: %clang_cc1 -std=c++20 %t/UseC.cppm -fprebuilt-module-path=%t -verify -S -o -
//--- A.cppm
// expected-no-diagnostics
export module A;
export template<typename T>
struct s {
friend s f(s) {
return s();
}
};
void g() {
f(s<int>());
}
//--- B.cppm
// expected-no-diagnostics
export module B;
export template<typename T>
struct s {
friend constexpr auto f(s) -> s {
return s();
}
};
void g() {
constexpr auto first = f(s<int>());
}
//--- C.cppm
// expected-no-diagnostics
export module C;
export template<typename StandardCharT, int N>
struct basic_symbol_text {
template<int N2>
constexpr friend basic_symbol_text operator+(
const basic_symbol_text&, const basic_symbol_text<char, N2>&) noexcept
{
return basic_symbol_text{};
}
};
constexpr auto xxx = basic_symbol_text<char, 1>{} + basic_symbol_text<char, 1>{};
//--- UseC.cppm
// expected-no-diagnostics
import C;
void foo() {}