[llvm-branch-commits] [clang] release/20.x: Revert "[C++20][Modules][Serialization] Delay marking pending incompl… (#127136) (PR #127252)
via llvm-branch-commits
llvm-branch-commits at lists.llvm.org
Thu Feb 20 15:11:38 PST 2025
https://github.com/llvmbot updated https://github.com/llvm/llvm-project/pull/127252
>From 99947c59de7b8ecbdda2a8b8ce78abc3083adee0 Mon Sep 17 00:00:00 2001
From: Zixu Wang <9819235+zixu-w at users.noreply.github.com>
Date: Thu, 13 Feb 2025 16:12:22 -0800
Subject: [PATCH] =?UTF-8?q?Revert=20"[C++20][Modules][Serialization]=20Del?=
=?UTF-8?q?ay=20marking=20pending=20incompl=E2=80=A6=20(#127136)?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
…ete decl chains until the end of `finishPendingActions`. (#121245)"
This reverts commit a9e249f64e800fbb20a3b26c0cfb68c1a1aee5e1.
Reverting this change because of issue #126973.
(cherry picked from commit 912b154f3a3f8c3cebf5cc5731fd8b0749762da5)
---
clang/lib/Serialization/ASTReader.cpp | 25 +++----
clang/test/Modules/pr121245.cpp | 93 ---------------------------
2 files changed, 13 insertions(+), 105 deletions(-)
delete mode 100644 clang/test/Modules/pr121245.cpp
diff --git a/clang/lib/Serialization/ASTReader.cpp b/clang/lib/Serialization/ASTReader.cpp
index 24acd6e297e71..f524251c48ddd 100644
--- a/clang/lib/Serialization/ASTReader.cpp
+++ b/clang/lib/Serialization/ASTReader.cpp
@@ -10186,12 +10186,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 =
@@ -10239,6 +10239,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,
@@ -10476,12 +10483,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() {
diff --git a/clang/test/Modules/pr121245.cpp b/clang/test/Modules/pr121245.cpp
deleted file mode 100644
index 0e276ad0e435d..0000000000000
--- a/clang/test/Modules/pr121245.cpp
+++ /dev/null
@@ -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();
-}
More information about the llvm-branch-commits
mailing list