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:
parent
b0ac81f225
commit
80f0208e78
@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -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
|
||||
|
Loading…
Reference in New Issue
Block a user