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>
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@210734
91177308-0d34-0410-b5e6-
96231b3b80d8
Assert1(!GA2->mayBeOverridden(), "Alias cannot point to a weak alias",
&GA);
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;
; CHECK: Alias must point to a definition
; CHECK-NEXT: @ga
; CHECK: Alias must point to a definition
; CHECK-NEXT: @ga
+; References to a global declaration from an initializer are OK.
+@gptr = global i32* @g
+@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
@test2_a = alias i32* @test2_b
@test2_b = alias i32* @test2_a