From 4901f0d2a25da6b678c3d6eb25ea73e0bdb7a229 Mon Sep 17 00:00:00 2001 From: Benjamin Kramer Date: Fri, 17 Aug 2012 14:16:37 +0000 Subject: Guard MemoryBuiltins against self-looping GEPs, which can occur in unreachable code due to constant propagation. Fixes PR13621. llvm-svn: 162098 --- llvm/lib/Analysis/MemoryBuiltins.cpp | 4 ++++ 1 file changed, 4 insertions(+) (limited to 'llvm/lib/Analysis/MemoryBuiltins.cpp') diff --git a/llvm/lib/Analysis/MemoryBuiltins.cpp b/llvm/lib/Analysis/MemoryBuiltins.cpp index c0cc27b6ec5..e77d2ff9e44 100644 --- a/llvm/lib/Analysis/MemoryBuiltins.cpp +++ b/llvm/lib/Analysis/MemoryBuiltins.cpp @@ -473,6 +473,10 @@ ObjectSizeOffsetVisitor::visitExtractValueInst(ExtractValueInst&) { } SizeOffsetType ObjectSizeOffsetVisitor::visitGEPOperator(GEPOperator &GEP) { + // Ignore self-referencing GEPs, they can occur in unreachable code. + if (&GEP == GEP.getPointerOperand()) + return unknown(); + SizeOffsetType PtrData = compute(GEP.getPointerOperand()); if (!bothKnown(PtrData) || !GEP.hasAllConstantIndices()) return unknown(); -- cgit v1.2.3