mirror of
https://github.com/llvm/llvm-project.git
synced 2025-04-24 06:26:07 +00:00
Revert "[C++20][Modules][Serialization] Delay marking pending incompl… (#127136)
…ete decl chains until the end of `finishPendingActions`. (#121245)" This reverts commit a9e249f64e800fbb20a3b26c0cfb68c1a1aee5e1. Reverting this change because of issue #126973.
This commit is contained in:
parent
6d3bfddb9d
commit
912b154f3a
@ -10188,12 +10188,12 @@ void ASTReader::visitTopLevelModuleMaps(
|
||||
}
|
||||
|
||||
void ASTReader::finishPendingActions() {
|
||||
while (!PendingIdentifierInfos.empty() ||
|
||||
!PendingDeducedFunctionTypes.empty() ||
|
||||
!PendingDeducedVarTypes.empty() || !PendingDeclChains.empty() ||
|
||||
!PendingMacroIDs.empty() || !PendingDeclContextInfos.empty() ||
|
||||
!PendingUpdateRecords.empty() ||
|
||||
!PendingObjCExtensionIvarRedeclarations.empty()) {
|
||||
while (
|
||||
!PendingIdentifierInfos.empty() || !PendingDeducedFunctionTypes.empty() ||
|
||||
!PendingDeducedVarTypes.empty() || !PendingIncompleteDeclChains.empty() ||
|
||||
!PendingDeclChains.empty() || !PendingMacroIDs.empty() ||
|
||||
!PendingDeclContextInfos.empty() || !PendingUpdateRecords.empty() ||
|
||||
!PendingObjCExtensionIvarRedeclarations.empty()) {
|
||||
// If any identifiers with corresponding top-level declarations have
|
||||
// been loaded, load those declarations now.
|
||||
using TopLevelDeclsMap =
|
||||
@ -10241,6 +10241,13 @@ void ASTReader::finishPendingActions() {
|
||||
}
|
||||
PendingDeducedVarTypes.clear();
|
||||
|
||||
// For each decl chain that we wanted to complete while deserializing, mark
|
||||
// it as "still needs to be completed".
|
||||
for (unsigned I = 0; I != PendingIncompleteDeclChains.size(); ++I) {
|
||||
markIncompleteDeclChain(PendingIncompleteDeclChains[I]);
|
||||
}
|
||||
PendingIncompleteDeclChains.clear();
|
||||
|
||||
// Load pending declaration chains.
|
||||
for (unsigned I = 0; I != PendingDeclChains.size(); ++I)
|
||||
loadPendingDeclChain(PendingDeclChains[I].first,
|
||||
@ -10478,12 +10485,6 @@ void ASTReader::finishPendingActions() {
|
||||
for (auto *ND : PendingMergedDefinitionsToDeduplicate)
|
||||
getContext().deduplicateMergedDefinitonsFor(ND);
|
||||
PendingMergedDefinitionsToDeduplicate.clear();
|
||||
|
||||
// For each decl chain that we wanted to complete while deserializing, mark
|
||||
// it as "still needs to be completed".
|
||||
for (Decl *D : PendingIncompleteDeclChains)
|
||||
markIncompleteDeclChain(D);
|
||||
PendingIncompleteDeclChains.clear();
|
||||
}
|
||||
|
||||
void ASTReader::diagnoseOdrViolations() {
|
||||
|
@ -1,93 +0,0 @@
|
||||
// If this test fails, it should be investigated under Debug builds.
|
||||
// Before the PR, this test was encountering an `llvm_unreachable()`.
|
||||
|
||||
// RUN: rm -rf %t
|
||||
// RUN: mkdir -p %t
|
||||
// RUN: split-file %s %t
|
||||
// RUN: cd %t
|
||||
|
||||
// RUN: %clang_cc1 -std=c++20 -emit-header-unit -xc++-user-header %t/hu-01.h \
|
||||
// RUN: -fcxx-exceptions -o %t/hu-01.pcm
|
||||
|
||||
// RUN: %clang_cc1 -std=c++20 -emit-header-unit -xc++-user-header %t/hu-02.h \
|
||||
// RUN: -Wno-experimental-header-units -fcxx-exceptions \
|
||||
// RUN: -fmodule-file=%t/hu-01.pcm -o %t/hu-02.pcm
|
||||
|
||||
// RUN: %clang_cc1 -std=c++20 -emit-header-unit -xc++-user-header %t/hu-03.h \
|
||||
// RUN: -Wno-experimental-header-units -fcxx-exceptions \
|
||||
// RUN: -fmodule-file=%t/hu-01.pcm -o %t/hu-03.pcm
|
||||
|
||||
// RUN: %clang_cc1 -std=c++20 -emit-header-unit -xc++-user-header %t/hu-04.h \
|
||||
// RUN: -Wno-experimental-header-units -fcxx-exceptions \
|
||||
// RUN: -fmodule-file=%t/hu-01.pcm -o %t/hu-04.pcm
|
||||
|
||||
// RUN: %clang_cc1 -std=c++20 -emit-header-unit -xc++-user-header %t/hu-05.h \
|
||||
// RUN: -Wno-experimental-header-units -fcxx-exceptions \
|
||||
// RUN: -fmodule-file=%t/hu-03.pcm -fmodule-file=%t/hu-04.pcm \
|
||||
// RUN: -fmodule-file=%t/hu-01.pcm -o %t/hu-05.pcm
|
||||
|
||||
// RUN: %clang_cc1 -std=c++20 -emit-obj %t/main.cpp \
|
||||
// RUN: -Wno-experimental-header-units -fcxx-exceptions \
|
||||
// RUN: -fmodule-file=%t/hu-02.pcm -fmodule-file=%t/hu-05.pcm \
|
||||
// RUN: -fmodule-file=%t/hu-04.pcm -fmodule-file=%t/hu-03.pcm \
|
||||
// RUN: -fmodule-file=%t/hu-01.pcm
|
||||
|
||||
//--- hu-01.h
|
||||
template <typename T>
|
||||
struct A {
|
||||
A() {}
|
||||
~A() {}
|
||||
};
|
||||
|
||||
template <typename T>
|
||||
struct EBO : T {
|
||||
EBO() = default;
|
||||
};
|
||||
|
||||
template <typename T>
|
||||
struct HT : EBO<A<T>> {};
|
||||
|
||||
//--- hu-02.h
|
||||
import "hu-01.h";
|
||||
|
||||
inline void f() {
|
||||
HT<int>();
|
||||
}
|
||||
|
||||
//--- hu-03.h
|
||||
import "hu-01.h";
|
||||
|
||||
struct C {
|
||||
C();
|
||||
|
||||
HT<long> _;
|
||||
};
|
||||
|
||||
//--- hu-04.h
|
||||
import "hu-01.h";
|
||||
|
||||
void g(HT<long> = {});
|
||||
|
||||
//--- hu-05.h
|
||||
import "hu-03.h";
|
||||
import "hu-04.h";
|
||||
import "hu-01.h";
|
||||
|
||||
struct B {
|
||||
virtual ~B() = default;
|
||||
|
||||
virtual void f() {
|
||||
HT<long>();
|
||||
}
|
||||
};
|
||||
|
||||
//--- main.cpp
|
||||
import "hu-02.h";
|
||||
import "hu-05.h";
|
||||
import "hu-03.h";
|
||||
|
||||
int main() {
|
||||
f();
|
||||
C();
|
||||
B();
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user