diff --git a/lib/Target/X86/X86AsmPrinter.cpp b/lib/Target/X86/X86AsmPrinter.cpp index 68e136bd776..1dca5689ade 100644 --- a/lib/Target/X86/X86AsmPrinter.cpp +++ b/lib/Target/X86/X86AsmPrinter.cpp @@ -670,16 +670,12 @@ void X86AsmPrinter::EmitEndOfAsmFile(Module &M) { DLLExportedGlobals.push_back(getSymbol(&Global)); for (const auto &Alias : M.aliases()) { - const GlobalValue *GV = &Alias; - if (!GV->hasDLLExportStorageClass()) + if (!Alias.hasDLLExportStorageClass()) continue; - while (const GlobalAlias *A = dyn_cast(GV)) - GV = A->getAliasee(); - - if (isa(GV)) + if (Alias.getType()->getElementType()->isFunctionTy()) DLLExportedFns.push_back(getSymbol(&Alias)); - else if (isa(GV)) + else DLLExportedGlobals.push_back(getSymbol(&Alias)); } diff --git a/test/CodeGen/X86/dllexport-x86_64.ll b/test/CodeGen/X86/dllexport-x86_64.ll index bd099b04223..1347664c71f 100644 --- a/test/CodeGen/X86/dllexport-x86_64.ll +++ b/test/CodeGen/X86/dllexport-x86_64.ll @@ -72,6 +72,8 @@ define weak_odr dllexport void @weak1() { ; CHECK: weak_alias = f1 @weak_alias = dllexport alias weak_odr void()* @f1 +@blob = global [6 x i8] c"\B8*\00\00\00\C3", section ".text", align 16 +@blob_alias = dllexport alias i32 (), [6 x i8]* @blob ; CHECK: .section .drectve ; WIN32: /EXPORT:Var1,DATA" @@ -88,6 +90,7 @@ define weak_odr dllexport void @weak1() { ; WIN32: /EXPORT:alias2" ; WIN32: /EXPORT:alias3" ; WIN32: /EXPORT:weak_alias" +; WIN32: /EXPORT:blob_alias" ; MINGW: -export:Var1,data" ; MINGW: -export:Var2,data" ; MINGW: -export:Var3,data" @@ -102,3 +105,4 @@ define weak_odr dllexport void @weak1() { ; MINGW: -export:alias2" ; MINGW: -export:alias3" ; MINGW: -export:weak_alias" +; MINGW: -export:blob_alias"