[PATCH] D133267: [Verifier] Reject dllexport with non-default visibility

Fangrui Song via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Mon Sep 5 10:25:05 PDT 2022


MaskRay updated this revision to Diff 458041.
MaskRay marked an inline comment as done.
MaskRay added a comment.

improve test


Repository:
  rG LLVM Github Monorepo

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

https://reviews.llvm.org/D133267

Files:
  llvm/lib/IR/Verifier.cpp
  llvm/test/CodeGen/PowerPC/aix-xcoff-exported-nondefault.ll
  llvm/test/Feature/globalvars.ll
  llvm/test/Verifier/dllstorage.ll


Index: llvm/test/Verifier/dllstorage.ll
===================================================================
--- /dev/null
+++ llvm/test/Verifier/dllstorage.ll
@@ -0,0 +1,18 @@
+; RUN: not opt -verify %s 2>&1 | FileCheck %s
+
+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-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: ptr @dllimport_hidden
+declare hidden dllimport i32 @dllimport_hidden()
+; CHECK:      dllimport GlobalValue must have default visibility
+; CHECK-NEXT: ptr @dllimport_protected
+declare protected dllimport i32 @dllimport_protected()
Index: llvm/test/Feature/globalvars.ll
===================================================================
--- llvm/test/Feature/globalvars.ll
+++ llvm/test/Feature/globalvars.ll
@@ -16,5 +16,5 @@
         ret i32 %blah
 }
 
- at 1 = hidden dllexport global i32 42
+ at 1 = default dllexport global i32 42
 @2 = dllexport global i32 42
Index: llvm/test/CodeGen/PowerPC/aix-xcoff-exported-nondefault.ll
===================================================================
--- llvm/test/CodeGen/PowerPC/aix-xcoff-exported-nondefault.ll
+++ llvm/test/CodeGen/PowerPC/aix-xcoff-exported-nondefault.ll
@@ -1,15 +1,5 @@
-; RUN: not --crash llc -verify-machineinstrs -mtriple powerpc-ibm-aix-xcoff 2>&1 < %s | \
-; RUN:   FileCheck %s
-; RUN: not --crash llc -verify-machineinstrs -mtriple powerpc64-ibm-aix-xcoff 2>&1 < %s |\
-; RUN:   FileCheck %s
+; RUN: not llc -filetype=null -mtriple powerpc-ibm-aix-xcoff 2>&1 %s | FileCheck %s
+; RUN: not llc -filetype=null -mtriple powerpc64-ibm-aix-xcoff 2>&1 %s | FileCheck %s
 
-; RUN: not --crash llc -verify-machineinstrs -mtriple powerpc-ibm-aix-xcoff \
-; RUN:     -filetype=obj -o %t.o < %s 2>&1 | \
-; RUN:   FileCheck %s
-
-; RUN: not --crash llc -verify-machineinstrs -mtriple powerpc64-ibm-aix-xcoff \
-; RUN:     -filetype=obj -o %t.o 2>&1 < %s 2>&1 | \
-; RUN:   FileCheck %s
-
-; CHECK: LLVM ERROR: Cannot not be both dllexport and non-default visibility
+; CHECK: dllexport GlobalValue must have default visibility
 @b_e = hidden dllexport global i32 0, align 4
Index: llvm/lib/IR/Verifier.cpp
===================================================================
--- llvm/lib/IR/Verifier.cpp
+++ llvm/lib/IR/Verifier.cpp
@@ -663,7 +663,13 @@
   if (GV.isDeclarationForLinker())
     Check(!GV.hasComdat(), "Declaration may not be in a Comdat!", &GV);
 
+  if (GV.hasDLLExportStorageClass()) {
+    Check(GV.hasDefaultVisibility(),
+          "dllexport GlobalValue must have default visibility", &GV);
+  }
   if (GV.hasDLLImportStorageClass()) {
+    Check(GV.hasDefaultVisibility(),
+          "dllimport GlobalValue must have default visibility", &GV);
     Check(!GV.isDSOLocal(), "GlobalValue with DLLImport Storage is dso_local!",
           &GV);
 


-------------- next part --------------
A non-text attachment was scrubbed...
Name: D133267.458041.patch
Type: text/x-patch
Size: 3194 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20220905/f32ae702/attachment.bin>


More information about the llvm-commits mailing list