[clang] [clang] Clear ASTContext::TUDecl in 'cleanup' for easier debugging (PR #191697)
Balázs Benics via cfe-commits
cfe-commits at lists.llvm.org
Sun Apr 12 03:39:45 PDT 2026
https://github.com/steakhal created https://github.com/llvm/llvm-project/pull/191697
While the ASTContext has more things inside, I think we should at least clear the TUDecl so that when traversing the (dangling) AST would immediately step on the null-dereference instead of chasing dangling pointers and crash later.
I was bitten by this in #191058.
This commit should be NFC - assuming that people didn't traverse already dangling ASTs.
>From 2a67e7213aea6e672467f3acb3a6108d1c848550 Mon Sep 17 00:00:00 2001
From: Balazs Benics <benicsbalazs at gmail.com>
Date: Sun, 12 Apr 2026 11:33:37 +0100
Subject: [PATCH] [clang] Clear ASTContext::TUDecl in 'cleanup' for easier
debugging
While the ASTContext has more things inside, I think we should at least
clear the TUDecl so that when traversing the (dangling) AST would
immediately step on the null-dereference instead of chasing dangling
pointers and crash later.
I was bitten by this in #191058.
This commit should be NFC - assuming that people didn't traverse already
dangling ASTs.
---
clang/include/clang/AST/ASTContext.h | 2 ++
clang/lib/AST/ASTContext.cpp | 1 +
2 files changed, 3 insertions(+)
diff --git a/clang/include/clang/AST/ASTContext.h b/clang/include/clang/AST/ASTContext.h
index ba1b58489c327..fc39f6af0cd9a 100644
--- a/clang/include/clang/AST/ASTContext.h
+++ b/clang/include/clang/AST/ASTContext.h
@@ -1268,6 +1268,8 @@ class ASTContext : public RefCountedBase<ASTContext> {
bool isInSameModule(const Module *M1, const Module *M2) const;
TranslationUnitDecl *getTranslationUnitDecl() const {
+ assert(TUDecl && "TUDecl might have been reset by 'cleanup' likely because "
+ "'CodeGenOpts.ClearASTBeforeBackend' was set.");
assert(TUDecl->getMostRecentDecl() == TUDecl &&
"The active TU is not current one!");
return TUDecl->getMostRecentDecl();
diff --git a/clang/lib/AST/ASTContext.cpp b/clang/lib/AST/ASTContext.cpp
index ee7f823b014b2..24a9295c4a2e6 100644
--- a/clang/lib/AST/ASTContext.cpp
+++ b/clang/lib/AST/ASTContext.cpp
@@ -943,6 +943,7 @@ void ASTContext::cleanup() {
Value.second->~PerModuleInitializers();
ModuleInitializers.clear();
+ TUDecl = nullptr;
XRayFilter.reset();
NoSanitizeL.reset();
}
More information about the cfe-commits
mailing list