[polly] r225326 - Do not use a const Twine here
David Blaikie
dblaikie at gmail.com
Tue Jan 6 17:57:22 PST 2015
On Tue, Jan 6, 2015 at 4:39 PM, Tobias Grosser <tobias at grosser.es> wrote:
> On 07.01.2015 01:33, David Blaikie wrote:
>
>>
>>
>> On Tue, Jan 6, 2015 at 4:30 PM, Tobias Grosser <tobias at grosser.es
>> <mailto:tobias at grosser.es>> wrote:
>>
>> Author: grosser
>> Date: Tue Jan 6 18:30:01 2015
>> New Revision: 225326
>>
>> URL: http://llvm.org/viewvc/llvm-project?rev=225326&view=rev
>> Log:
>> Do not use a const Twine here
>>
>> This has caused segfaults when using Polly in the context of Julia,
>> that are
>> not reproducible on my machine in 'make check-polly'.
>>
>> Modified:
>> polly/trunk/lib/CodeGen/IslExprBuilder.cpp
>>
>> Modified: polly/trunk/lib/CodeGen/IslExprBuilder.cpp
>> URL:
>> http://llvm.org/viewvc/llvm-project/polly/trunk/lib/
>> CodeGen/IslExprBuilder.cpp?rev=225326&r1=225325&r2=225326&view=diff
>> ============================================================
>> ==================
>> --- polly/trunk/lib/CodeGen/IslExprBuilder.cpp (original)
>> +++ polly/trunk/lib/CodeGen/IslExprBuilder.cpp Tue Jan 6 18:30:01
>> 2015
>> @@ -112,7 +112,7 @@ Value *IslExprBuilder::createAccessAddre
>> const ScopArrayInfo *SAI = ScopArrayInfo::getFromId(BaseId);
>> Base = SAI->getBasePtr();
>> assert(Base->getType()->isPointerTy() && "Access base should be
>> a pointer");
>> - const Twine &BaseName = Base->getName();
>> + auto BaseName = Base->getName();
>>
>>
>> So what type does getName return? StringRef?
>>
>
> Base is an llvm::Value and llvm::Value's getName() function returns a
> StringRef, yes.
>
> Are you saying I should not use 'auto' here?
Wasn't what I was saying, but now I will ;) I think, if it's that subtle,
it's probably worth being explicit
> Or do you have an explanation for the memory corruption I am seeing?
>
As the other parts of this email thread discussed, the StringRef is
returned by value, and is thus a temporary in the expression. The Twine
only takes a pointer/reference to it, so the Twine persists (due to
reference lifetime extension stuff) but it refers to a StringRef that is
destroyed.
>
> Cheers,
> Tobias
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20150106/c3fd992c/attachment.html>
More information about the llvm-commits
mailing list