1
0
mirror of https://github.com/RPCS3/llvm-mirror.git synced 2024-11-22 18:54:02 +01:00

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>

llvm-svn: 210734
This commit is contained in:
Bob Wilson 2014-06-12 01:46:54 +00:00
parent b0ac81f225
commit 80f0208e78
2 changed files with 8 additions and 0 deletions

View File

@ -493,6 +493,10 @@ void Verifier::visitAliaseeSubExpr(SmallPtrSet<const GlobalAlias *, 4> &Visited,
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;
}
}

View File

@ -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.
@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