[llvm-commits] [llvm] r162098 - in /llvm/trunk: lib/Analysis/MemoryBuiltins.cpp test/Transforms/InstCombine/objsize.ll
Benjamin Kramer
benny.kra at gmail.com
Fri Aug 17 11:07:07 PDT 2012
On 17.08.2012, at 19:47, Eli Friedman <eli.friedman at gmail.com> wrote:
> On Fri, Aug 17, 2012 at 7:16 AM, Benjamin Kramer
> <benny.kra at googlemail.com> wrote:
>> Author: d0k
>> Date: Fri Aug 17 09:16:37 2012
>> New Revision: 162098
>>
>> URL: http://llvm.org/viewvc/llvm-project?rev=162098&view=rev
>> Log:
>> Guard MemoryBuiltins against self-looping GEPs, which can occur in unreachable code due to constant propagation.
>>
>> Fixes PR13621.
>>
>> Modified:
>> llvm/trunk/lib/Analysis/MemoryBuiltins.cpp
>> llvm/trunk/test/Transforms/InstCombine/objsize.ll
>>
>> Modified: llvm/trunk/lib/Analysis/MemoryBuiltins.cpp
>> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Analysis/MemoryBuiltins.cpp?rev=162098&r1=162097&r2=162098&view=diff
>> ==============================================================================
>> --- llvm/trunk/lib/Analysis/MemoryBuiltins.cpp (original)
>> +++ llvm/trunk/lib/Analysis/MemoryBuiltins.cpp Fri Aug 17 09:16:37 2012
>> @@ -473,6 +473,10 @@
>> }
>>
>> SizeOffsetType ObjectSizeOffsetVisitor::visitGEPOperator(GEPOperator &GEP) {
>> + // Ignore self-referencing GEPs, they can occur in unreachable code.
>> + if (&GEP == GEP.getPointerOperand())
>> + return unknown();
>
> What happens when you have two GEPs referencing each other?
I've wondered about this too, but can it really happen?
I'm also not sure how to integrate a visited set into the instvisitor.
- Ben
More information about the llvm-commits
mailing list