llvm-project/clang/test/Modules/pr102360.cppm
Chuanqi Xu e72d956b99
[C++20] [Modules] Don't diagnose duplicated implicit decl in multiple named modules (#102423)
Close https://github.com/llvm/llvm-project/issues/102360 
Close https://github.com/llvm/llvm-project/issues/102349

http://eel.is/c++draft/basic.def.odr#15.3 makes it clear that the
duplicated deinition are not allowed to be attached to named modules.

But we need to filter the implicit declarations as user can do nothing
about it and the diagnostic message is annoying.
2024-08-08 13:29:59 +08:00

54 lines
899 B
C++

// RUN: rm -rf %t
// RUN: mkdir -p %t
// RUN: split-file %s %t
//
// RUN: %clang_cc1 -std=c++20 %t/a.cppm -emit-module-interface -o %t/a.pcm
// RUN: %clang_cc1 -std=c++20 %t/b.cppm -emit-module-interface -o %t/b.pcm \
// RUN: -fprebuilt-module-path=%t
// RUN: %clang_cc1 -std=c++20 %t/c.cppm -emit-module-interface -o %t/c.pcm \
// RUN: -fprebuilt-module-path=%t
// RUN: %clang_cc1 -std=c++20 %t/d.cpp -fsyntax-only -verify \
// RUN: -fprebuilt-module-path=%t
//--- a.cppm
export module a;
template<typename>
constexpr auto impl = true;
export template<typename T>
void a() {
}
export template<typename T> requires impl<T>
void a() {
}
//--- b.cppm
export module b;
import a;
static void b() {
a<void>();
}
//--- c.cppm
export module c;
import a;
static void c() {
a<void>();
}
//--- d.cpp
// expected-no-diagnostics
import a;
import b;
import c;
static void d() {
a<void>();
}