[llvm] r326814 - Refactor check for dllimport in the Verifier.

Rafael Espindola via llvm-commits llvm-commits at lists.llvm.org
Tue Mar 6 09:19:23 PST 2018


Author: rafael
Date: Tue Mar  6 09:19:23 2018
New Revision: 326814

URL: http://llvm.org/viewvc/llvm-project?rev=326814&view=rev
Log:
Refactor check for dllimport in the Verifier.

This avoids duplicated code and now also rejects dllimport aliases.

Modified:
    llvm/trunk/lib/IR/Verifier.cpp
    llvm/trunk/test/Bitcode/compatibility.ll

Modified: llvm/trunk/lib/IR/Verifier.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/IR/Verifier.cpp?rev=326814&r1=326813&r2=326814&view=diff
==============================================================================
--- llvm/trunk/lib/IR/Verifier.cpp (original)
+++ llvm/trunk/lib/IR/Verifier.cpp Tue Mar  6 09:19:23 2018
@@ -566,10 +566,15 @@ void Verifier::visitGlobalValue(const Gl
   if (GV.isDeclarationForLinker())
     Assert(!GV.hasComdat(), "Declaration may not be in a Comdat!", &GV);
 
-  if (GV.hasDLLImportStorageClass())
+  if (GV.hasDLLImportStorageClass()) {
     Assert(!GV.isDSOLocal(),
            "GlobalValue with DLLImport Storage is dso_local!", &GV);
 
+    Assert((GV.isDeclaration() && GV.hasExternalLinkage()) ||
+               GV.hasAvailableExternallyLinkage(),
+           "Global is marked as dllimport, but not external", &GV);
+  }
+
   if (GV.hasLocalLinkage())
     Assert(GV.isDSOLocal(),
            "GlobalValue with private or internal linkage must be dso_local!",
@@ -665,11 +670,6 @@ void Verifier::visitGlobalVariable(const
     }
   }
 
-  Assert(!GV.hasDLLImportStorageClass() ||
-             (GV.isDeclaration() && GV.hasExternalLinkage()) ||
-             GV.hasAvailableExternallyLinkage(),
-         "Global is marked as dllimport, but not external", &GV);
-
   // Visit any debug info attachments.
   SmallVector<MDNode *, 1> MDs;
   GV.getMetadata(LLVMContext::MD_dbg, MDs);
@@ -2193,11 +2193,6 @@ void Verifier::visitFunction(const Funct
       Assert(false, "Invalid user of intrinsic instruction!", U);
   }
 
-  Assert(!F.hasDLLImportStorageClass() ||
-             (F.isDeclaration() && F.hasExternalLinkage()) ||
-             F.hasAvailableExternallyLinkage(),
-         "Function is marked as dllimport, but not external.", &F);
-
   auto *N = F.getSubprogram();
   HasDebugInfo = (N != nullptr);
   if (!HasDebugInfo)

Modified: llvm/trunk/test/Bitcode/compatibility.ll
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Bitcode/compatibility.ll?rev=326814&r1=326813&r2=326814&view=diff
==============================================================================
--- llvm/trunk/test/Bitcode/compatibility.ll (original)
+++ llvm/trunk/test/Bitcode/compatibility.ll Tue Mar  6 09:19:23 2018
@@ -230,8 +230,6 @@ declare void @g.f1()
 ; Aliases -- DLLStorageClass
 @a.dlldefault = default alias i32, i32* @g.dlldefault
 ; CHECK: @a.dlldefault = alias i32, i32* @g.dlldefault
- at a.dllimport = dllimport alias i32, i32* @g1
-; CHECK: @a.dllimport = dllimport alias i32, i32* @g1
 @a.dllexport = dllexport alias i32, i32* @g.dllexport
 ; CHECK: @a.dllexport = dllexport alias i32, i32* @g.dllexport
 




More information about the llvm-commits mailing list