Skip to content

Commit 198a13e

Browse files
committed
Fix for PR46384. Failure on weak dllimport.
Differential Revision: https://reviews.llvm.org/D86907
1 parent 0cefaec commit 198a13e

File tree

2 files changed

+30
-1
lines changed

2 files changed

+30
-1
lines changed

llvm/lib/IR/Verifier.cpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -589,7 +589,8 @@ void Verifier::visitGlobalValue(const GlobalValue &GV) {
589589
Assert(!GV.isDSOLocal(),
590590
"GlobalValue with DLLImport Storage is dso_local!", &GV);
591591

592-
Assert((GV.isDeclaration() && GV.hasExternalLinkage()) ||
592+
Assert((GV.isDeclaration() &&
593+
(GV.hasExternalLinkage() || GV.hasExternalWeakLinkage())) ||
593594
GV.hasAvailableExternallyLinkage(),
594595
"Global is marked as dllimport, but not external", &GV);
595596
}

llvm/test/Verifier/weak-dllimport.ll

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
; RUN: opt -verify < %s 2>&1 | FileCheck %s
2+
; CHECK-NOT: Global is marked as dllimport, but not external
3+
4+
target datalayout = "e-m:w-p270:32:32-p271:32:32-p272:64:64-i64:64-f80:128-n8:16:32:64-S128"
5+
target triple = "x86_64-pc-windows-msvc19.11.0"
6+
7+
@"?var_hook@@3HA" = extern_weak dllimport global i32, align 4
8+
9+
; Function Attrs: noinline optnone uwtable
10+
define dso_local zeroext i1 @"?foo@@YA_NPEAHH@Z"(i32* %0, i32 %1) #0 {
11+
ret i1 0
12+
}
13+
14+
declare extern_weak dllimport void @func_hook(i32) #1
15+
16+
attributes #0 = { noinline optnone uwtable }
17+
attributes #1 = { uwtable }
18+
19+
; Compiled from the following C++ example with --target=x86_64-pc-win32,
20+
; using the non-checking configuration
21+
;__declspec(dllimport) __attribute__((weak)) extern "C" void func_hook(int);
22+
;extern __declspec(dllimport) __attribute__((weak)) int var_hook;
23+
;bool foo(int *q, int p)
24+
;{
25+
; if (func_hook)
26+
; func_hook(p);
27+
; return &var_hook == q;
28+
;}

0 commit comments

Comments
 (0)