[llvm] r210734 - Fix verifier for GlobalAliases to avoid recursing into global initializers.
Bob Wilson
bob.wilson at apple.com
Wed Jun 11 18:46:54 PDT 2014
Author: bwilson
Date: Wed Jun 11 20:46:54 2014
New Revision: 210734
URL: http://llvm.org/viewvc/llvm-project?rev=210734&view=rev
Log:
Fix verifier for GlobalAliases to avoid recursing into global initializers.
The verifier follows GlobalAlias operands so that it can detect cycles of
alias definitions. It was doing this in a way that caused it to also recurse
through initializers for the GlobalValue aliasees, and it would fail when
an initializer refers to a global that is a declaration and not a definition.
This patch causes it to stop recursing when it hits a global definition.
<rdar://problem/17277451>
Modified:
llvm/trunk/lib/IR/Verifier.cpp
llvm/trunk/test/Verifier/alias.ll
Modified: llvm/trunk/lib/IR/Verifier.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/IR/Verifier.cpp?rev=210734&r1=210733&r2=210734&view=diff
==============================================================================
--- llvm/trunk/lib/IR/Verifier.cpp (original)
+++ llvm/trunk/lib/IR/Verifier.cpp Wed Jun 11 20:46:54 2014
@@ -493,6 +493,10 @@ void Verifier::visitAliaseeSubExpr(Small
Assert1(!GA2->mayBeOverridden(), "Alias cannot point to a weak alias",
&GA);
+ } else {
+ // Only continue verifying subexpressions of GlobalAliases.
+ // Do not recurse into global initializers.
+ return;
}
}
Modified: llvm/trunk/test/Verifier/alias.ll
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Verifier/alias.ll?rev=210734&r1=210733&r2=210734&view=diff
==============================================================================
--- llvm/trunk/test/Verifier/alias.ll (original)
+++ llvm/trunk/test/Verifier/alias.ll Wed Jun 11 20:46:54 2014
@@ -11,6 +11,10 @@ declare void @f()
; CHECK: Alias must point to a definition
; CHECK-NEXT: @ga
+; References to a global declaration from an initializer are OK.
+ at gptr = global i32* @g
+ at gptr_a = alias i32** @gptr
+; CHECK-NOT: Alias must point to a definition
@test2_a = alias i32* @test2_b
@test2_b = alias i32* @test2_a
More information about the llvm-commits
mailing list