[clang] [MS][clang] Add support for vector deleting destructors (PR #126240)

2025-03-28 Thread Mariya Podchishchaeva via cfe-commits
Fznamznon wrote: Soo, I restored all the attributes on vector deleting destructor and the calling convention (so they are the same as in non-failing case) and the crash is gone. I'll put a PR reapplying the patch soon. The reduction helped a lot, thanks! https://github.com/llvm/llvm-project/p

[clang] [MS][clang] Add support for vector deleting destructors (PR #126240)

2025-03-27 Thread Mariya Podchishchaeva via cfe-commits
Fznamznon wrote: Removing `static ` from `newUnicodeStringArray` also makes the crash go away... https://github.com/llvm/llvm-project/pull/126240 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cf

[clang] [MS][clang] Add support for vector deleting destructors (PR #126240)

2025-03-27 Thread Mariya Podchishchaeva via cfe-commits
Fznamznon wrote: Thank you for your help @rnk @zmodem ! https://github.com/llvm/llvm-project/pull/126240 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

[clang] [MS][clang] Add support for vector deleting destructors (PR #126240)

2025-03-27 Thread Hans Wennborg via cfe-commits
zmodem wrote: A few notes from looking today. Reduced main a bit further: ``` int main(int argc, const char** argv) { volatile auto p = &FilteredBreakIteratorBuilder::createEmptyInstance; icu::UnicodeString* St = new icu::UnicodeString("abacabadabacab", 15); delete St; printf("OKAY\n");

[clang] [MS][clang] Add support for vector deleting destructors (PR #126240)

2025-03-26 Thread Reid Kleckner via cfe-commits
rnk wrote: I'll try to take a look at this when I get a chance, but that looks like it's not happening today. I read the comments a bit and found some codesearch links worth sharing for reference. Here's the original UnicodeString array new operation: https://source.chromium.org/chromium/chrom

[clang] [MS][clang] Add support for vector deleting destructors (PR #126240)

2025-03-26 Thread Mariya Podchishchaeva via cfe-commits
Fznamznon wrote: I reduced main code to ``` #include "unicode/filteredbrk.h" #include using namespace icu; int main(int argc, const char** argv) { UErrorCode status = U_ZERO_ERROR; //BreakIterator* bi = BreakIterator::createWordInstance(root, status); // Any iterator will do, make sure fi

[clang] [MS][clang] Add support for vector deleting destructors (PR #126240)

2025-03-26 Thread Mariya Podchishchaeva via cfe-commits
Fznamznon wrote: The problem also is only reproducible when using -start-lib -end-lib options around icu library object files in the linking command. https://github.com/llvm/llvm-project/pull/126240 ___ cfe-commits mailing list cfe-commits@lists.llvm.

[clang] [MS][clang] Add support for vector deleting destructors (PR #126240)

2025-03-26 Thread Mariya Podchishchaeva via cfe-commits
Fznamznon wrote: I also noticed that removing -DU_STATIC_IMPLEMENTATION macro passing fixes the crash. https://github.com/llvm/llvm-project/pull/126240 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/list

[clang] [MS][clang] Add support for vector deleting destructors (PR #126240)

2025-03-24 Thread Mariya Podchishchaeva via cfe-commits
Fznamznon wrote: So, the body of the destructor is not the problem. I commented out all new additions to body emission of the destructor and it still crashes. What makes the difference is the alias emission. I commented out alias emission and it started passing with "_E" destructor always emitt

[clang] [MS][clang] Add support for vector deleting destructors (PR #126240)

2025-03-19 Thread Mariya Podchishchaeva via cfe-commits
Fznamznon wrote: > I've uploaded a stand-alone from-source reproducer of the run time crash > here: https://crbug.com/402425841#comment10 Reproduced. Seems limited to 32-bit build (only reproducible with -m32 option) and lld linker. Fine with either standard linker or 64-bit build. https://gi

[clang] [MS][clang] Add support for vector deleting destructors (PR #126240)

2025-03-18 Thread Mariya Podchishchaeva via cfe-commits
Fznamznon wrote: > I think the `.SCOV$M` section globals should be in the > `??_EClassA@@UEAAPEXI@Z` comdat group. I think sanitizer coverage (sancov) is > one of the lesser-used sanitizers here, and it may lack some sophistication > when it comes to comdat groups. I wasn't aware of this creat

[clang] [MS][clang] Add support for vector deleting destructors (PR #126240)

2025-03-17 Thread Hans Wennborg via cfe-commits
zmodem wrote: > but, that is still not a great reproducer for a reverted patch. Especially if > the link issue is due to a missing support in linker. I would appreciate if > you could maybe point to how exactly UnicodeString is used in failing > scenario. I'm sorry that we didn't catch this p

[clang] [MS][clang] Add support for vector deleting destructors (PR #126240)

2025-03-14 Thread Reid Kleckner via cfe-commits
rnk wrote: I think the `.SCOV$M` section globals should be in the `??_EClassA@@UEAAPEXI@Z` comdat group. I think sanitizer coverage (sancov) is one of the lesser-used sanitizers here, and it may lack some sophistication when it comes to comdat groups. I wasn't aware of this creative use of `bl

[clang] [MS][clang] Add support for vector deleting destructors (PR #126240)

2025-03-14 Thread Mariya Podchishchaeva via cfe-commits
Fznamznon wrote: Reduced linkage failure reproducer (can be reduced further, I'm sure), it consists of 4 files t.h: ``` #include struct Base { Base() {} virtual ~Base() {} }; struct ClassA : public Base { inline ClassA(); virtual ~ClassA(){} ; }; inline ClassA::ClassA() {} vo

[clang] [MS][clang] Add support for vector deleting destructors (PR #126240)

2025-03-13 Thread Hans Wennborg via cfe-commits
zmodem wrote: > It turns out another issue (https://crbug.com/402425841) also bisected to > this PR. That one is a run-time problem, so it may be trickier to figure out, > but I will look into it next. The bugs seem related by both involving the ICU library, and if squinting a bit it seems th

[clang] [MS][clang] Add support for vector deleting destructors (PR #126240)

2025-03-13 Thread Mariya Podchishchaeva via cfe-commits
Fznamznon wrote: > I've put lld-link repro tarballs before and after the llvm change here: > https://issues.chromium.org/u/1/issues/402354446#comment8 Thanks, I'll take a look! https://github.com/llvm/llvm-project/pull/126240 ___ cfe-commits mailing

[clang] [MS][clang] Add support for vector deleting destructors (PR #126240)

2025-03-13 Thread Hans Wennborg via cfe-commits
zmodem wrote: I've put lld-link repro tarballs before and after the llvm change here: https://issues.chromium.org/u/1/issues/402354446#comment8 https://github.com/llvm/llvm-project/pull/126240 ___ cfe-commits mailing list cfe-commits@lists.llvm.org ht

[clang] [MS][clang] Add support for vector deleting destructors (PR #126240)

2025-03-13 Thread Aaron Ballman via cfe-commits
AaronBallman wrote: > Yes, I'm prioritizing this today. I had hoped filteredbrk.obj was enough, but > I'm working on uploading full linker repros. > > It turns out another issue (https://crbug.com/402425841) also bisected to > this PR. That one is a run-time problem, so it may be trickier to f

[clang] [MS][clang] Add support for vector deleting destructors (PR #126240)

2025-03-13 Thread Hans Wennborg via cfe-commits
zmodem wrote: Yes, I'm prioritizing this today. I had hoped filteredbrk.obj was enough, but I'm working on uploading full linker repros. It turns out another issue (https://crbug.com/402425841) also bisected to this PR. That one is a run-time problem, so it may be trickier to figure out, but I

[clang] [MS][clang] Add support for vector deleting destructors (PR #126240)

2025-03-13 Thread Aaron Ballman via cfe-commits
AaronBallman wrote: > We're hitting link errors after this change when building with sanitizer > coverage enabled: > > ``` > lld-link: error: relocation against symbol in discarded section: .text > >>> referenced by obj/third_party/icu/icuuc_private/filteredbrk.obj:(.SCOVP$M) > >>> referenced b

[clang] [MS][clang] Add support for vector deleting destructors (PR #126240)

2025-03-12 Thread Mariya Podchishchaeva via cfe-commits
Fznamznon wrote: @zmodem , are you able to reproduce the link issue with just the `filteredbrk.obj` ? I can't spot a problem in LLVM IR or ASM emitted from it and lld just gives a bunch of "undefined symbol" link errors. Is that possible that more files are needed to reproduce? https://githu

[clang] [MS][clang] Add support for vector deleting destructors (PR #126240)

2025-03-12 Thread Mariya Podchishchaeva via cfe-commits
Fznamznon wrote: > Can you take a look? Thanks for reporting this. I'll take a look. https://github.com/llvm/llvm-project/pull/126240 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

[clang] [MS][clang] Add support for vector deleting destructors (PR #126240)

2025-03-12 Thread Hans Wennborg via cfe-commits
zmodem wrote: We're hitting link errors after this change when building with sanitizer coverage enabled: ``` lld-link: error: relocation against symbol in discarded section: .text >>> referenced by obj/third_party/icu/icuuc_private/filteredbrk.obj:(.SCOVP$M) >>> referenced by obj/third_party/ic

[clang] [MS][clang] Add support for vector deleting destructors (PR #126240)

2025-02-28 Thread Mariya Podchishchaeva via cfe-commits
Fznamznon wrote: > Thanks! I approved it. Thanks! I'll wait with a merge till next week in case someone else has comments. https://github.com/llvm/llvm-project/pull/126240 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/

[clang] [MS][clang] Add support for vector deleting destructors (PR #126240)

2025-02-27 Thread Reid Kleckner via cfe-commits
https://github.com/rnk approved this pull request. Thanks! I approved it. https://github.com/llvm/llvm-project/pull/126240 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

[clang] [MS][clang] Add support for vector deleting destructors (PR #126240)

2025-02-26 Thread Reid Kleckner via cfe-commits
https://github.com/rnk commented: I resolved two conversations, but there are two actionable comments. https://github.com/llvm/llvm-project/pull/126240 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listi

[clang] [MS][clang] Add support for vector deleting destructors (PR #126240)

2025-02-26 Thread Reid Kleckner via cfe-commits
https://github.com/rnk commented: Hm, these comments didn't post. They may be stale. I will post them and revisit them. https://github.com/llvm/llvm-project/pull/126240 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi

[clang] [MS][clang] Add support for vector deleting destructors (PR #126240)

2025-02-26 Thread Reid Kleckner via cfe-commits
@@ -7919,3 +7919,38 @@ void CodeGenModule::moveLazyEmissionStates(CodeGenModule *NewBuilder) { NewBuilder->ABI->MangleCtx = std::move(ABI->MangleCtx); } + +bool CodeGenModule::classNeedsVectorDestructor(const CXXRecordDecl *RD) { + CXXDestructorDecl *Dtor = RD->getDestruct

[clang] [MS][clang] Add support for vector deleting destructors (PR #126240)

2025-02-26 Thread Reid Kleckner via cfe-commits
@@ -7919,3 +7919,38 @@ void CodeGenModule::moveLazyEmissionStates(CodeGenModule *NewBuilder) { NewBuilder->ABI->MangleCtx = std::move(ABI->MangleCtx); } + +bool CodeGenModule::classNeedsVectorDestructor(const CXXRecordDecl *RD) { + CXXDestructorDecl *Dtor = RD->getDestruct

[clang] [MS][clang] Add support for vector deleting destructors (PR #126240)

2025-02-26 Thread Reid Kleckner via cfe-commits
@@ -575,6 +576,12 @@ class CGCXXABI { QualType ElementType, llvm::Value *&NumElements, llvm::Value *&AllocPtr, CharUnits &CookieSize); + /// Reads the array cookie associated with the given pointer, + /// that sho

[clang] [MS][clang] Add support for vector deleting destructors (PR #126240)

2025-02-26 Thread Reid Kleckner via cfe-commits
@@ -2657,7 +2657,10 @@ class VFTableBuilder { MethodVFTableLocation Loc(MI.VBTableIndex, WhichVFPtr.getVBaseWithVPtr(), WhichVFPtr.NonVirtualOffset, MI.VFTableIndex); if (const CXXDestructorDecl *DD = dyn_cast(MD)) { -MethodVF

[clang] [MS][clang] Add support for vector deleting destructors (PR #126240)

2025-02-26 Thread Reid Kleckner via cfe-commits
https://github.com/rnk edited https://github.com/llvm/llvm-project/pull/126240 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

[clang] [MS][clang] Add support for vector deleting destructors (PR #126240)

2025-02-21 Thread Hans Wennborg via cfe-commits
zmodem wrote: > this is a high-risk change to keep in mind if any Windows-specific issues > arise. Thanks for the heads up! https://github.com/llvm/llvm-project/pull/126240 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.or

[clang] [MS][clang] Add support for vector deleting destructors (PR #126240)

2025-02-21 Thread Mariya Podchishchaeva via cfe-commits
@@ -7919,3 +7919,38 @@ void CodeGenModule::moveLazyEmissionStates(CodeGenModule *NewBuilder) { NewBuilder->ABI->MangleCtx = std::move(ABI->MangleCtx); } + +bool CodeGenModule::classNeedsVectorDestructor(const CXXRecordDecl *RD) { + CXXDestructorDecl *Dtor = RD->getDestruct

[clang] [MS][clang] Add support for vector deleting destructors (PR #126240)

2025-02-21 Thread Mariya Podchishchaeva via cfe-commits
https://github.com/Fznamznon edited https://github.com/llvm/llvm-project/pull/126240 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

[clang] [MS][clang] Add support for vector deleting destructors (PR #126240)

2025-02-21 Thread Mariya Podchishchaeva via cfe-commits
@@ -7919,3 +7919,38 @@ void CodeGenModule::moveLazyEmissionStates(CodeGenModule *NewBuilder) { NewBuilder->ABI->MangleCtx = std::move(ABI->MangleCtx); } + +bool CodeGenModule::classNeedsVectorDestructor(const CXXRecordDecl *RD) { + CXXDestructorDecl *Dtor = RD->getDestruct

[clang] [MS][clang] Add support for vector deleting destructors (PR #126240)

2025-02-20 Thread Reid Kleckner via cfe-commits
rnk wrote: Thanks for the updates, I think this is almost done. @zmodem , this will probably have some impact on Chrome code size and will probably churn many crash stack traces. I think it's safe to rely on all the existing automated testing, but this is a high-risk change to keep in mind if

[clang] [MS][clang] Add support for vector deleting destructors (PR #126240)

2025-02-20 Thread Mariya Podchishchaeva via cfe-commits
@@ -1407,6 +1413,8 @@ llvm::GlobalValue::LinkageTypes MicrosoftCXXABI::getCXXDestructorLinkage( // and are emitted everywhere they are used. They are internal if the class // is internal. return llvm::GlobalValue::LinkOnceODRLinkage; + case Dtor_VectorDeleting: +

[clang] [MS][clang] Add support for vector deleting destructors (PR #126240)

2025-02-20 Thread Mariya Podchishchaeva via cfe-commits
@@ -448,7 +453,8 @@ class ItaniumCXXABI : public CodeGen::CGCXXABI { if (!IsInlined) continue; - StringRef Name = CGM.getMangledName(VtableComponent.getGlobalDecl()); + StringRef Name = + CGM.getMangledName(VtableComponent.getGlobalDecl(fa

[clang] [MS][clang] Add support for vector deleting destructors (PR #126240)

2025-02-20 Thread Mariya Podchishchaeva via cfe-commits
@@ -1592,8 +1666,12 @@ namespace { bool ReturnAfterDelete) { llvm::BasicBlock *callDeleteBB = CGF.createBasicBlock("dtor.call_delete"); llvm::BasicBlock *continueBB = CGF.createBasicBlock("dtor.continue"); -llvm::Value *ShouldCal

[clang] [MS][clang] Add support for vector deleting destructors (PR #126240)

2025-02-20 Thread Mariya Podchishchaeva via cfe-commits
@@ -7919,3 +7919,38 @@ void CodeGenModule::moveLazyEmissionStates(CodeGenModule *NewBuilder) { NewBuilder->ABI->MangleCtx = std::move(ABI->MangleCtx); } + +bool CodeGenModule::classNeedsVectorDestructor(const CXXRecordDecl *RD) { + CXXDestructorDecl *Dtor = RD->getDestruct

[clang] [MS][clang] Add support for vector deleting destructors (PR #126240)

2025-02-20 Thread Mariya Podchishchaeva via cfe-commits
https://github.com/Fznamznon updated https://github.com/llvm/llvm-project/pull/126240 >From 04636bea1b873805af02dea865637d7125cee1e5 Mon Sep 17 00:00:00 2001 From: "Podchishchaeva, Mariya" Date: Thu, 12 Dec 2024 08:57:37 -0800 Subject: [PATCH 1/3] [MS][clang] Add support for vector deleting des

[clang] [MS][clang] Add support for vector deleting destructors (PR #126240)

2025-02-20 Thread Mariya Podchishchaeva via cfe-commits
@@ -2013,7 +2023,7 @@ llvm::Value *MicrosoftCXXABI::EmitVirtualDestructorCall( ASTContext &Context = getContext(); llvm::Value *ImplicitParam = llvm::ConstantInt::get( llvm::IntegerType::getInt32Ty(CGF.getLLVMContext()), - DtorType == Dtor_Deleting); + 2 * (

[clang] [MS][clang] Add support for vector deleting destructors (PR #126240)

2025-02-20 Thread Mariya Podchishchaeva via cfe-commits
@@ -1433,6 +1433,83 @@ static bool CanSkipVTablePointerInitialization(CodeGenFunction &CGF, return true; } +namespace { +llvm::Value *LoadThisForDtorDelete(CodeGenFunction &CGF, Fznamznon wrote: I moved it back. It seems in some earlier iteration of the pa

[clang] [MS][clang] Add support for vector deleting destructors (PR #126240)

2025-02-20 Thread Mariya Podchishchaeva via cfe-commits
@@ -4053,6 +4063,19 @@ void MicrosoftCXXABI::emitCXXStructor(GlobalDecl GD) { if (GD.getDtorType() == Dtor_Base && !CGM.TryEmitBaseDestructorAsAlias(dtor)) return; + if (GD.getDtorType() == Dtor_VectorDeleting && + !CGM.classNeedsVectorDestructor(dtor->getParent())

[clang] [MS][clang] Add support for vector deleting destructors (PR #126240)

2025-02-20 Thread Mariya Podchishchaeva via cfe-commits
@@ -1433,6 +1433,83 @@ static bool CanSkipVTablePointerInitialization(CodeGenFunction &CGF, return true; } +namespace { +llvm::Value *LoadThisForDtorDelete(CodeGenFunction &CGF, + const CXXDestructorDecl *DD) { + if (Expr *ThisArg = DD->ge

[clang] [MS][clang] Add support for vector deleting destructors (PR #126240)

2025-02-20 Thread Mariya Podchishchaeva via cfe-commits
@@ -1366,9 +1372,9 @@ bool ItaniumCXXABI::isZeroInitializable(const MemberPointerType *MPT) { /// at entry -2 in the vtable. void ItaniumCXXABI::emitVirtualObjectDelete(CodeGenFunction &CGF, const CXXDeleteExpr *DE, -

[clang] [MS][clang] Add support for vector deleting destructors (PR #126240)

2025-02-13 Thread Mariya Podchishchaeva via cfe-commits
Fznamznon wrote: Ping. https://github.com/llvm/llvm-project/pull/126240 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

[clang] [MS][clang] Add support for vector deleting destructors (PR #126240)

2025-02-07 Thread Mariya Podchishchaeva via cfe-commits
https://github.com/Fznamznon updated https://github.com/llvm/llvm-project/pull/126240 >From 04636bea1b873805af02dea865637d7125cee1e5 Mon Sep 17 00:00:00 2001 From: "Podchishchaeva, Mariya" Date: Thu, 12 Dec 2024 08:57:37 -0800 Subject: [PATCH 1/2] [MS][clang] Add support for vector deleting des

[clang] [MS][clang] Add support for vector deleting destructors (PR #126240)

2025-02-07 Thread via cfe-commits
github-actions[bot] wrote: :warning: C/C++ code formatter, clang-format found issues in your code. :warning: You can test this locally with the following command: ``bash git-clang-format --diff 83ba3740bf51347307494d013099e392c310e32b 04636bea1b873805af02dea865637d7125cee1e5 --e

[clang] [MS][clang] Add support for vector deleting destructors (PR #126240)

2025-02-07 Thread via cfe-commits
llvmbot wrote: @llvm/pr-subscribers-clang Author: Mariya Podchishchaeva (Fznamznon) Changes Whereas it is UB in terms of the standard to delete an array of objects via pointer whose static type doesn't match its dynamic type, MSVC supports an extension allowing to do it. Aside from array

[clang] [MS][clang] Add support for vector deleting destructors (PR #126240)

2025-02-07 Thread via cfe-commits
llvmbot wrote: @llvm/pr-subscribers-debuginfo @llvm/pr-subscribers-clang-codegen Author: Mariya Podchishchaeva (Fznamznon) Changes Whereas it is UB in terms of the standard to delete an array of objects via pointer whose static type doesn't match its dynamic type, MSVC supports an extens

[clang] [MS][clang] Add support for vector deleting destructors (PR #126240)

2025-02-07 Thread Mariya Podchishchaeva via cfe-commits
https://github.com/Fznamznon created https://github.com/llvm/llvm-project/pull/126240 Whereas it is UB in terms of the standard to delete an array of objects via pointer whose static type doesn't match its dynamic type, MSVC supports an extension allowing to do it. Aside from array deletion no