definition correctly Close https://github.com/llvm/llvm-project/issues/61067 Previously we will only handle the defaulted member functions as discardable ODR. But we need to handle defaulted friend function in this way too. Otherwise we may run into the problems the above issue report mentions.
41 lines
1.0 KiB
C++
41 lines
1.0 KiB
C++
// From https://github.com/llvm/llvm-project/issues/61067
|
|
// RUN: rm -rf %t
|
|
// RUN: mkdir -p %t
|
|
// RUN: split-file %s %t
|
|
//
|
|
// RUN: %clang_cc1 -std=c++20 -triple %itanium_abi_triple %t/a.cppm \
|
|
// RUN: -emit-module-interface -o %t/a.pcm
|
|
// RUN: %clang_cc1 -std=c++20 -triple %itanium_abi_triple %t/b.cppm \
|
|
// RUN: -emit-module-interface -fmodule-file=a=%t/a.pcm -o %t/b.pcm
|
|
// RUN: %clang_cc1 -std=c++20 -triple %itanium_abi_triple %t/b.pcm -S \
|
|
// RUN: -emit-llvm -disable-llvm-passes -o - | FileCheck %t/b.cppm
|
|
// RUN: %clang_cc1 -std=c++20 -triple %itanium_abi_triple %t/c.cpp -fmodule-file=a=%t/a.pcm \
|
|
// RUN: -S -emit-llvm -disable-llvm-passes -o - | FileCheck %t/c.cpp
|
|
|
|
//--- a.cppm
|
|
export module a;
|
|
|
|
export struct a {
|
|
friend bool operator==(a, a) = default;
|
|
};
|
|
|
|
//--- b.cppm
|
|
export module b;
|
|
|
|
import a;
|
|
|
|
void b() {
|
|
(void)(a() == a());
|
|
}
|
|
|
|
// CHECK: define{{.*}}linkonce_odr{{.*}}@_ZW1aeqS_1aS0_(
|
|
|
|
//--- c.cpp
|
|
import a;
|
|
|
|
int c() {
|
|
(void)(a() == a());
|
|
}
|
|
|
|
// CHECK: define{{.*}}linkonce_odr{{.*}}@_ZW1aeqS_1aS0_(
|