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

Eli Friedman via cfe-commits cfe-commits at lists.llvm.org
Tue Aug 5 10:50:14 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"));
----------------
efriedma-quic wrote:

Maybe name this dynamic_cast.unreachable, since anything in the basic block is unreachable.

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


More information about the cfe-commits mailing list