[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