[PATCH] D86907: Fix for PR46384. Failure on weak dllimport.

Sunil Srivastava via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Wed Sep 2 19:12:38 PDT 2020


This revision was automatically updated to reflect the committed changes.
Sunil_Srivastava marked 2 inline comments as done.
Closed by commit rG198a13e970db: Fix for PR46384. Failure on weak dllimport. (authored by Sunil_Srivastava).

Changed prior to commit:
  https://reviews.llvm.org/D86907?vs=289605&id=289620#toc

Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D86907/new/

https://reviews.llvm.org/D86907

Files:
  llvm/lib/IR/Verifier.cpp
  llvm/test/Verifier/weak-dllimport.ll


Index: llvm/test/Verifier/weak-dllimport.ll
===================================================================
--- /dev/null
+++ llvm/test/Verifier/weak-dllimport.ll
@@ -0,0 +1,28 @@
+; RUN: opt -verify < %s 2>&1 | FileCheck %s
+; CHECK-NOT: Global is marked as dllimport, but not external
+
+target datalayout = "e-m:w-p270:32:32-p271:32:32-p272:64:64-i64:64-f80:128-n8:16:32:64-S128"
+target triple = "x86_64-pc-windows-msvc19.11.0"
+
+@"?var_hook@@3HA" = extern_weak dllimport global i32, align 4
+
+; Function Attrs: noinline optnone uwtable
+define dso_local zeroext i1 @"?foo@@YA_NPEAHH at Z"(i32* %0, i32 %1) #0 {
+   ret i1 0
+}
+
+declare extern_weak dllimport void @func_hook(i32) #1
+
+attributes #0 = { noinline optnone uwtable }
+attributes #1 = { uwtable }
+
+; Compiled from the following C++ example with --target=x86_64-pc-win32,
+; using the non-checking configuration
+;__declspec(dllimport) __attribute__((weak)) extern "C" void func_hook(int);
+;extern __declspec(dllimport) __attribute__((weak)) int var_hook;
+;bool foo(int *q, int p)
+;{
+;  if (func_hook)
+;    func_hook(p);
+;  return &var_hook == q;
+;}
Index: llvm/lib/IR/Verifier.cpp
===================================================================
--- llvm/lib/IR/Verifier.cpp
+++ llvm/lib/IR/Verifier.cpp
@@ -589,7 +589,8 @@
     Assert(!GV.isDSOLocal(),
            "GlobalValue with DLLImport Storage is dso_local!", &GV);
 
-    Assert((GV.isDeclaration() && GV.hasExternalLinkage()) ||
+    Assert((GV.isDeclaration() &&
+            (GV.hasExternalLinkage() || GV.hasExternalWeakLinkage())) ||
                GV.hasAvailableExternallyLinkage(),
            "Global is marked as dllimport, but not external", &GV);
   }


-------------- next part --------------
A non-text attachment was scrubbed...
Name: D86907.289620.patch
Type: text/x-patch
Size: 1708 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20200903/697ad909/attachment.bin>


More information about the llvm-commits mailing list