[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