[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