[llvm] r304123 - Don't capture a temporary std::string in a StringRef.

Zachary Turner via llvm-commits llvm-commits at lists.llvm.org
Sun May 28 19:38:52 PDT 2017


Also it wasn't actually "crashing", it was hitting the llvm_unreachable at
the bottom of this function.

On Sun, May 28, 2017 at 7:38 PM Zachary Turner <zturner at google.com> wrote:

> Just let it crash under the debugger, and when I looked at Name it was
> "\0em16".  But when I stepped into getValueAsString it looked like it was
> indeed returning "Mem16", which should have been correct.  So there was
> obviously some memory corruption, but since it happened in such a narrow
> time frame (between the return statement and assigning the value to the
> StringRef, there weren't really a lot of possibilities.  So when I checked
> the function signature, sure enough it was returning a std::string.
>
> On Sun, May 28, 2017 at 7:33 PM Craig Topper <craig.topper at gmail.com>
> wrote:
>
>> How did you narrow it down to that?
>>
>> ~Craig
>>
>> On Sun, May 28, 2017 at 7:20 PM, Zachary Turner via llvm-commits <
>> llvm-commits at lists.llvm.org> wrote:
>>
>>> Author: zturner
>>> Date: Sun May 28 21:20:12 2017
>>> New Revision: 304123
>>>
>>> URL: http://llvm.org/viewvc/llvm-project?rev=304123&view=rev
>>> Log:
>>> Don't capture a temporary std::string in a StringRef.
>>>
>>> This fixes the breakages in llvm-tblgen.
>>>
>>> Modified:
>>>     llvm/trunk/utils/TableGen/X86FoldTablesEmitter.cpp
>>>
>>> Modified: llvm/trunk/utils/TableGen/X86FoldTablesEmitter.cpp
>>> URL:
>>> http://llvm.org/viewvc/llvm-project/llvm/trunk/utils/TableGen/X86FoldTablesEmitter.cpp?rev=304123&r1=304122&r2=304123&view=diff
>>>
>>> ==============================================================================
>>> --- llvm/trunk/utils/TableGen/X86FoldTablesEmitter.cpp (original)
>>> +++ llvm/trunk/utils/TableGen/X86FoldTablesEmitter.cpp Sun May 28
>>> 21:20:12 2017
>>> @@ -285,7 +285,7 @@ getMemOperandSize(const Record *MemRec,
>>>          (MemRec->getName() == "sdmem" || MemRec->getName() == "ssmem"))
>>>        return 128;
>>>
>>> -    StringRef Name =
>>> +    std::string Name =
>>>
>>>  MemRec->getValueAsDef("ParserMatchClass")->getValueAsString("Name");
>>>      if (Name == "Mem8")
>>>        return 8;
>>>
>>>
>>> _______________________________________________
>>> llvm-commits mailing list
>>> llvm-commits at lists.llvm.org
>>> http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits
>>>
>>
>>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20170529/5a251e16/attachment-0001.html>


More information about the llvm-commits mailing list