[clang] [clang] Fix crash in dynamic_cast final class optimization (PR #152076)

Oliver Hunt via cfe-commits cfe-commits at lists.llvm.org
Wed Aug 6 01:15:40 PDT 2025


================
@@ -2294,6 +2294,18 @@ llvm::Value *CodeGenFunction::EmitDynamicCast(Address ThisAddr,
                  DestRecordTy->getAsCXXRecordDecl()->isEffectivelyFinal() &&
                  CGM.getCXXABI().shouldEmitExactDynamicCast(DestRecordTy);
 
+  std::optional<CGCXXABI::ExactDynamicCastInfo> ExactCastInfo;
+  if (IsExact) {
+    ExactCastInfo = CGM.getCXXABI().getExactDynamicCastInfo(SrcRecordTy, DestTy,
+                                                            DestRecordTy);
+    if (!ExactCastInfo) {
+      llvm::Value *NullValue = EmitDynamicCastToNull(*this, DestTy);
+      if (!Builder.GetInsertBlock())
+        EmitBlock(createBasicBlock("dynamic_cast.always_fails"));
----------------
ojhunt wrote:

done.

https://github.com/llvm/llvm-project/pull/152076


More information about the cfe-commits mailing list