nickdesaulniers updated this revision to Diff 524532.
nickdesaulniers marked an inline comment as done.
nickdesaulniers added a comment.

- more dyn_cast


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D151148/new/

https://reviews.llvm.org/D151148

Files:
  clang/lib/AST/ExprConstant.cpp
  clang/test/CodeGen/object-size.c


Index: clang/test/CodeGen/object-size.c
===================================================================
--- clang/test/CodeGen/object-size.c
+++ clang/test/CodeGen/object-size.c
@@ -551,6 +551,10 @@
   // CHECK: ret i64 16
   return OBJECT_SIZE_BUILTIN(&D34, 1);
 }
+unsigned long test35(void) {
+  // CHECK: ret i64 16
+  return OBJECT_SIZE_BUILTIN(&(struct DynStructVar){}, 1);
+}
 
 // CHECK-LABEL: @PR30346
 void PR30346(void) {
Index: clang/lib/AST/ExprConstant.cpp
===================================================================
--- clang/lib/AST/ExprConstant.cpp
+++ clang/lib/AST/ExprConstant.cpp
@@ -11736,9 +11736,9 @@
     bool Ret = HandleSizeof(Info, ExprLoc, Ty, Result);
     if (Ty->isStructureType() &&
         Ty->getAsStructureType()->getDecl()->hasFlexibleArrayMember()) {
-      const auto *VD =
-          cast<VarDecl>(LVal.getLValueBase().get<const ValueDecl *>());
-      Result += VD->getFlexibleArrayInitChars(Info.Ctx);
+      if (const auto *V = LVal.getLValueBase().dyn_cast<const ValueDecl *>())
+        if (const auto *VD = dyn_cast<VarDecl>(V))
+          Result += VD->getFlexibleArrayInitChars(Info.Ctx);
     }
     return Ret;
   };


Index: clang/test/CodeGen/object-size.c
===================================================================
--- clang/test/CodeGen/object-size.c
+++ clang/test/CodeGen/object-size.c
@@ -551,6 +551,10 @@
   // CHECK: ret i64 16
   return OBJECT_SIZE_BUILTIN(&D34, 1);
 }
+unsigned long test35(void) {
+  // CHECK: ret i64 16
+  return OBJECT_SIZE_BUILTIN(&(struct DynStructVar){}, 1);
+}
 
 // CHECK-LABEL: @PR30346
 void PR30346(void) {
Index: clang/lib/AST/ExprConstant.cpp
===================================================================
--- clang/lib/AST/ExprConstant.cpp
+++ clang/lib/AST/ExprConstant.cpp
@@ -11736,9 +11736,9 @@
     bool Ret = HandleSizeof(Info, ExprLoc, Ty, Result);
     if (Ty->isStructureType() &&
         Ty->getAsStructureType()->getDecl()->hasFlexibleArrayMember()) {
-      const auto *VD =
-          cast<VarDecl>(LVal.getLValueBase().get<const ValueDecl *>());
-      Result += VD->getFlexibleArrayInitChars(Info.Ctx);
+      if (const auto *V = LVal.getLValueBase().dyn_cast<const ValueDecl *>())
+        if (const auto *VD = dyn_cast<VarDecl>(V))
+          Result += VD->getFlexibleArrayInitChars(Info.Ctx);
     }
     return Ret;
   };
_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to