From 97d00b72a2b0a7aca631e1402a647f32c4e8bafb Mon Sep 17 00:00:00 2001 From: Fangrui Song Date: Tue, 6 Sep 2022 15:28:29 -0700 Subject: [PATCH] [Verifier] Allow dllexport protected after D133267 I have noticed that this combo makes sense (D133266) but rejected it for simplicity. It turns out to be used by PlayStation, so let's allow it. --- llvm/lib/IR/Verifier.cpp | 5 +++-- llvm/test/Verifier/dllstorage.ll | 8 +++----- 2 files changed, 6 insertions(+), 7 deletions(-) diff --git a/llvm/lib/IR/Verifier.cpp b/llvm/lib/IR/Verifier.cpp index da19afa..3921742 100644 --- a/llvm/lib/IR/Verifier.cpp +++ b/llvm/lib/IR/Verifier.cpp @@ -664,8 +664,9 @@ void Verifier::visitGlobalValue(const GlobalValue &GV) { Check(!GV.hasComdat(), "Declaration may not be in a Comdat!", &GV); if (GV.hasDLLExportStorageClass()) { - Check(GV.hasDefaultVisibility(), - "dllexport GlobalValue must have default visibility", &GV); + Check(!GV.hasHiddenVisibility(), + "dllexport GlobalValue must have default or protected visibility", + &GV); } if (GV.hasDLLImportStorageClass()) { Check(GV.hasDefaultVisibility(), diff --git a/llvm/test/Verifier/dllstorage.ll b/llvm/test/Verifier/dllstorage.ll index 4791691..8885d0f 100644 --- a/llvm/test/Verifier/dllstorage.ll +++ b/llvm/test/Verifier/dllstorage.ll @@ -3,16 +3,14 @@ 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-gnu" -; CHECK: dllexport GlobalValue must have default visibility +; CHECK: dllexport GlobalValue must have default or protected visibility ; CHECK-NEXT: ptr @dllexport_hidden declare hidden dllexport i32 @dllexport_hidden() -; CHECK: dllexport GlobalValue must have default visibility -; CHECK-NEXT: ptr @dllexport_protected declare protected dllexport i32 @dllexport_protected() -; CHECK: dllimport GlobalValue must have default visibility +; CHECK-NEXT: dllimport GlobalValue must have default visibility ; CHECK-NEXT: ptr @dllimport_hidden declare hidden dllimport i32 @dllimport_hidden() -; CHECK: dllimport GlobalValue must have default visibility +; CHECK-NEXT: dllimport GlobalValue must have default visibility ; CHECK-NEXT: ptr @dllimport_protected declare protected dllimport i32 @dllimport_protected() -- 2.7.4