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
_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to