1; RUN: llc -mtriple x86_64-pc-win32 < %s | FileCheck -check-prefix=CHECK -check-prefix=WIN32 %s 2; RUN: llc -mtriple x86_64-pc-mingw32 < %s | FileCheck -check-prefix=CHECK -check-prefix=MINGW %s 3; RUN: llc -mtriple x86_64-pc-win32 < %s | FileCheck -check-prefix=NOTEXPORTED %s 4; RUN: llc -mtriple x86_64-pc-mingw32 < %s | FileCheck -check-prefix=NOTEXPORTED %s 5 6; CHECK: .text 7 8define void @notExported() { 9 ret void 10} 11 12; CHECK: .globl f1 13define dllexport void @f1() { 14 ret void 15} 16 17; CHECK: .globl f2 18define dllexport void @f2() unnamed_addr { 19 ret void 20} 21 22; CHECK: .globl lnk1 23define linkonce_odr dllexport void @lnk1() { 24 ret void 25} 26 27; CHECK: .globl lnk2 28define linkonce_odr dllexport void @lnk2() alwaysinline { 29 ret void 30} 31 32; CHECK: .globl weak1 33define weak_odr dllexport void @weak1() { 34 ret void 35} 36 37 38; CHECK: .data 39; CHECK: .globl Var1 40@Var1 = dllexport global i32 1, align 4 41 42; CHECK: .rdata,"dr" 43; CHECK: .globl Var2 44@Var2 = dllexport unnamed_addr constant i32 1 45 46; CHECK: .comm Var3 47@Var3 = common dllexport global i32 0, align 4 48 49; CHECK: .globl WeakVar1 50@WeakVar1 = weak_odr dllexport global i32 1, align 4 51 52; CHECK: .globl WeakVar2 53@WeakVar2 = weak_odr dllexport unnamed_addr constant i32 1 54 55; CHECK: .bss 56; CHECK: .globl WeakVar3 57@WeakVar3 = weak_odr dllexport global i32 0, align 4 58 59 60; CHECK: .globl alias 61; CHECK: alias = notExported 62@alias = dllexport alias void(), void()* @notExported 63 64; CHECK: .globl aliasNotExported 65; CHECK: aliasNotExported = f1 66@aliasNotExported = alias void(), void()* @f1 67 68; CHECK: .globl alias2 69; CHECK: alias2 = f1 70@alias2 = dllexport alias void(), void()* @f1 71 72; CHECK: .globl alias3 73; CHECK: alias3 = notExported 74@alias3 = dllexport alias void(), void()* @notExported 75 76; CHECK: .weak weak_alias 77; CHECK: weak_alias = f1 78@weak_alias = weak_odr dllexport alias void(), void()* @f1 79 80@blob = global [6 x i8] c"\B8*\00\00\00\C3", section ".text", align 16 81@blob_alias = dllexport alias i32 (), bitcast ([6 x i8]* @blob to i32 ()*) 82 83@exportedButNotDefinedVariable = external dllexport global i32 84declare dllexport void @exportedButNotDefinedFunction() 85define void @foo() { 86entry: 87 store i32 4, i32* @exportedButNotDefinedVariable, align 4 88 call void @exportedButNotDefinedFunction() 89 ret void 90} 91 92; Verify items that should not be exported do not appear in the export table. 93; We use a separate check prefix to avoid confusion between -NOT and -SAME. 94; NOTEXPORTED: .section .drectve 95; NOTEXPORTED-NOT: notExported 96; NOTEXPORTED-NOT: aliasNotExported 97; NOTEXPORTED-NOT: exportedButNotDefinedVariable 98; NOTEXPORTED-NOT: exportedButNotDefinedFunction 99 100; CHECK: .section .drectve 101; WIN32: /EXPORT:f1 102; WIN32-SAME: /EXPORT:f2 103; WIN32-SAME: /EXPORT:lnk1 104; WIN32-SAME: /EXPORT:lnk2 105; WIN32-SAME: /EXPORT:weak1 106; WIN32-SAME: /EXPORT:Var1,DATA 107; WIN32-SAME: /EXPORT:Var2,DATA 108; WIN32-SAME: /EXPORT:Var3,DATA 109; WIN32-SAME: /EXPORT:WeakVar1,DATA 110; WIN32-SAME: /EXPORT:WeakVar2,DATA 111; WIN32-SAME: /EXPORT:WeakVar3,DATA 112; WIN32-SAME: /EXPORT:alias 113; WIN32-SAME: /EXPORT:alias2 114; WIN32-SAME: /EXPORT:alias3 115; WIN32-SAME: /EXPORT:weak_alias 116; WIN32-SAME: /EXPORT:blob_alias 117; MINGW: -export:f1 118; MINGW-SAME: -export:f2 119; MINGW-SAME: -export:lnk1 120; MINGW-SAME: -export:lnk2 121; MINGW-SAME: -export:weak1 122; MINGW-SAME: -export:Var1,data 123; MINGW-SAME: -export:Var2,data 124; MINGW-SAME: -export:Var3,data 125; MINGW-SAME: -export:WeakVar1,data 126; MINGW-SAME: -export:WeakVar2,data 127; MINGW-SAME: -export:WeakVar3,data 128; MINGW-SAME: -export:alias 129; MINGW-SAME: -export:alias2 130; MINGW-SAME: -export:alias3 131; MINGW-SAME: -export:weak_alias 132; MINGW-SAME: -export:blob_alias" 133