[llvm-dev] Crash in SmallVector with latest MSVC 2019 (debug mode)
Francois Pichet via llvm-dev
llvm-dev at lists.llvm.org
Wed Jan 22 12:01:47 PST 2020
Thank you.
Yes the bug occurs in tablegen first but even if you bypass tablegen-debug
it will eventually occur elsewhere too (llvm, lldb etc)..
I'll try to reduce the problem in a isolated test case and submit a bug to
Microsoft.
Sadly I am stuck with 32-bit compile for now because we use liblldb.dll and
libclang.dll as in-process DLL inside a 32-bit .exe.
(Forgot reply-all)
On Wed, Jan 22, 2020 at 2:25 PM Reid Kleckner <rnk at google.com> wrote:
> I was able to reproduce the problem. It seems to relate to the use of a
> UniqueVector (which uses std::vector internally) of SmallVectors here:
>
> https://github.com/llvm/llvm-project/blob/master/llvm/utils/TableGen/DFAEmitter.h#L91
>
> Aside from potential MSVC bugs, this is a poor choice of data structures.
> I would suggest using a SmallVector<T, 0> or std::vector<T> instead. So, we
> could commit that as a workaround.
>
> Relatedly, debug MSVC tablegen builds are still unusably slow. :(
> https://bugs.llvm.org/show_bug.cgi?id=28222
>
> On Wed, Jan 22, 2020 at 11:15 AM Reid Kleckner <rnk at google.com> wrote:
>
>> I don't think there is anymore upstream LLVM testing for 32-bit MSVC.
>> I'll run a local build in this configuration and look into it. I'll use
>> this compiler version:
>> Microsoft (R) C/C++ Optimizing Compiler Version 19.24.28315 for x86
>>
>> We had so many issues in clang-cl around calling conventions for "small"
>> objects with interior pointers, I wouldn't be surprised if there are bugs.
>>
>> On Wed, Jan 22, 2020 at 10:01 AM Francois Pichet via llvm-dev <
>> llvm-dev at lists.llvm.org> wrote:
>>
>>> Is anybody using the LLVM/clang/lldb compiled with the MSVC 2019
>>> (x86-32bit) successfully?
>>> I am getting crash in SmallVector at multiple places after a
>>> llvm:SmallVector is being moved around in move constructor or move
>>> operator=.
>>> Not sure what is going on.
>>>
>>> ~SmallVectorImpl() {
>>> if (!this->isSmall())
>>> free(this->begin()); // <=== crash here, line 336 SmallVector.h
>>> }
>>>
>>> The crash occurs only with clang compile in debug mode. Release mode is
>>> fine.
>>>
>>> _______________________________________________
>>> LLVM Developers mailing list
>>> llvm-dev at lists.llvm.org
>>> https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev
>>>
>>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20200122/67734f9a/attachment.html>
More information about the llvm-dev
mailing list