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

Mariya Podchishchaeva via cfe-commits cfe-commits at lists.llvm.org
Wed Mar 26 09:47:31 PDT 2025


Fznamznon wrote:

I reduced main code to
```
#include "unicode/filteredbrk.h"
#include <stdio.h>

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 filteredbrk.cpp is involved
  FilteredBreakIteratorBuilder* fbiBuilder = FilteredBreakIteratorBuilder::createInstance(status);

  icu::UnicodeString* St = new icu::UnicodeString("abacabadabacab", 15);

  delete St;

  printf("OKAY\n");
  return 0;
}
```
In order to avoid UniSet creation.
That still does not give a clear understanding of what is going on because the reproducer is massive and entangled. For some reason pointer to vtable is corrupted when the destructor of UnicodeString is called.

@zmodem any chance you could help to reduce it further? I already spent reasonable amount of time doing this without a good output. 

This does seem like a problem that may have been introduced by the lld. The fact that it all passes in x64 mode, or without alias emission, or without -start-lib -end-lib options. But I am still not sure. I would appreciate any thoughts on this. @rnk , any chance you might be aware of some linkage-related specific affecting vector deleting destructors when building 32-bit applications?

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


More information about the cfe-commits mailing list