https://github.com/GkvJwa created https://github.com/llvm/llvm-project/pull/180905
Fix #180648 >From beeee4ee91ed70de12a6eb8e48f3a9846b944f16 Mon Sep 17 00:00:00 2001 From: GkvJwa <[email protected]> Date: Wed, 11 Feb 2026 17:38:09 +0800 Subject: [PATCH] [WinEH] Support ptr types(to Argument) --- clang/lib/CodeGen/CGException.cpp | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/clang/lib/CodeGen/CGException.cpp b/clang/lib/CodeGen/CGException.cpp index 2f1df6e9a8a5c..de5c9e92dd655 100644 --- a/clang/lib/CodeGen/CGException.cpp +++ b/clang/lib/CodeGen/CGException.cpp @@ -1836,8 +1836,20 @@ Address CodeGenFunction::recoverAddrOfEscapedLocal(CodeGenFunction &ParentCGF, llvm::Value *ParentFP) { llvm::CallInst *RecoverCall = nullptr; CGBuilderTy Builder(*this, AllocaInsertPt); - if (auto *ParentAlloca = - dyn_cast_or_null<llvm::AllocaInst>(ParentVar.getBasePointer())) { + auto *ParentAlloca = + dyn_cast_or_null<llvm::AllocaInst>(ParentVar.getBasePointer()); + if (!ParentAlloca) { + if (auto *ParentArg = + dyn_cast_or_null<llvm::Argument>(ParentVar.getBasePointer())) { + llvm::BasicBlock &EntryBB = ParentCGF.CurFn->getEntryBlock(); + llvm::IRBuilder<> ParentEntryBuilder(&EntryBB, EntryBB.begin()); + ParentAlloca = ParentEntryBuilder.CreateAlloca( + ParentArg->getType(), nullptr, ParentArg->getName() + ".addr"); + ParentEntryBuilder.CreateStore(ParentArg, ParentAlloca); + } + } + + if (ParentAlloca) { // Mark the variable escaped if nobody else referenced it and compute the // localescape index. auto InsertPair = ParentCGF.EscapedLocals.insert( _______________________________________________ cfe-commits mailing list [email protected] https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
