[clang] 613d2c3 - [clang][Interp][NFC] Avoid hitting an assertion in invalid code
Timm Bäder via cfe-commits
cfe-commits at lists.llvm.org
Mon Jul 22 07:59:46 PDT 2024
Author: Timm Bäder
Date: 2024-07-22T16:59:31+02:00
New Revision: 613d2c393992eee470405f1859aaf5fd1837e36c
URL: https://github.com/llvm/llvm-project/commit/613d2c393992eee470405f1859aaf5fd1837e36c
DIFF: https://github.com/llvm/llvm-project/commit/613d2c393992eee470405f1859aaf5fd1837e36c.diff
LOG: [clang][Interp][NFC] Avoid hitting an assertion in invalid code
Added:
Modified:
clang/lib/AST/Interp/Pointer.cpp
Removed:
################################################################################
diff --git a/clang/lib/AST/Interp/Pointer.cpp b/clang/lib/AST/Interp/Pointer.cpp
index 229007c6d720a..3324691cdb7b7 100644
--- a/clang/lib/AST/Interp/Pointer.cpp
+++ b/clang/lib/AST/Interp/Pointer.cpp
@@ -149,6 +149,10 @@ APValue Pointer::toAPValue(const ASTContext &ASTCtx) const {
CharUnits Offset = CharUnits::Zero();
auto getFieldOffset = [&](const FieldDecl *FD) -> CharUnits {
+ // This shouldn't happen, but if it does, don't crash inside
+ // getASTRecordLayout.
+ if (FD->getParent()->isInvalidDecl())
+ return CharUnits::Zero();
const ASTRecordLayout &Layout = ASTCtx.getASTRecordLayout(FD->getParent());
unsigned FieldIndex = FD->getFieldIndex();
return ASTCtx.toCharUnitsFromBits(Layout.getFieldOffset(FieldIndex));
More information about the cfe-commits
mailing list