Files
clang-p2996/clang/test/Modules/no-duplicate-codegen-in-GMF.cppm
Chuanqi Xu c21790d023 [NFC] [C++20] [Modules] Tests that the duplicated declarations in GMF
won't get generated again

As the test shows, we don't want to see the specialized function bodies
if it is already contained in the imported modules. So we can save a lot
of compiling time then.
2023-03-17 15:58:10 +08:00

41 lines
893 B
C++

// Tests that the declaration won't get emitted after being merged.
//
// 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 -emit-module-interface -o %t/A.pcm
// RUN: %clang_cc1 -std=c++20 -triple %itanium_abi_triple %t/B.cppm -emit-module-interface -o %t/B.pcm \
// RUN: -fprebuilt-module-path=%t
// RUN: %clang_cc1 -std=c++20 -triple %itanium_abi_triple %t/B.pcm -S -emit-llvm -o - | FileCheck %t/B.cppm
//--- foo.h
template <class T>
class foo {
public:
T value;
T GetValue() { return value; }
};
template class foo<int>;
//--- A.cppm
module;
#include "foo.h"
export module A;
export using ::foo;
//--- B.cppm
module;
#include "foo.h"
export module B;
import A;
export using ::foo;
export int B() {
foo<int> f;
return f.GetValue();
}
// CHECK-NOT: define{{.*}}@_ZN3fooIiE8GetValueEv