[polly] r225326 - Do not use a const Twine here
Mehdi Amini
mehdi.amini at apple.com
Tue Jan 6 17:00:14 PST 2015
> On Jan 6, 2015, at 4:55 PM, Mehdi Amini <mehdi.amini at apple.com> wrote:
>
>>
>> On 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? Or do you have an explanation for the memory corruption I am seeing?
>
> Isn’t it possible that the issue was taking a Twine by reference?
Update: taking by reference or not does not change anything here, the same reasoning applies if you construct a Twine out of a temporary StringRef.
Mehdi
> I mean the return object is a temporary StringRef, it will be destroyed unless bound to a temporary. However there is a Twine constructor which is called for the conversion here, so the temp is bound to the argument of the Twine ctor and its lifetime ends with the ctor.
> You Twine reference a destroyed StringRef after that.
>
> Mehdi
>
>
>
>>
>> Cheers,
>> Tobias
>> _______________________________________________
>> llvm-commits mailing list
>> llvm-commits at cs.uiuc.edu
>> http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits
>
>
> _______________________________________________
> llvm-commits mailing list
> llvm-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits
More information about the llvm-commits
mailing list