From: Saleem Abdulrasool Date: Sun, 11 May 2014 01:31:57 +0000 (+0000) Subject: CodeGen: support dll{ex,im}port on WoA X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=18512f3e519046e7b500f1a0fc070e0f50fb7e42;p=clang CodeGen: support dll{ex,im}port on WoA Add ARM support for dllexport and dllimport attributes. This is a relatively conservative change. The alternative is to entirely drop the architecture requirement. The dllimport and dllexport attributes are not restricted to any architecture, simply to platforms that support this attribute (currently Windows). git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@208486 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/include/clang/Basic/Attr.td b/include/clang/Basic/Attr.td index 958d03eb48..5c5e597993 100644 --- a/include/clang/Basic/Attr.td +++ b/include/clang/Basic/Attr.td @@ -233,7 +233,7 @@ class TargetArch arches> { def TargetARM : TargetArch<["arm", "thumb"]>; def TargetMSP430 : TargetArch<["msp430"]>; def TargetX86 : TargetArch<["x86"]>; -def TargetX86Win : TargetArch<["x86", "x86_64"]> { +def TargetWindows : TargetArch<["x86", "x86_64", "arm", "thumb"]> { let OSes = ["Win32"]; } def TargetMips : TargetArch<["mips", "mipsel"]>; @@ -1645,13 +1645,13 @@ def MsStruct : InheritableAttr { let Documentation = [Undocumented]; } -def DLLExport : InheritableAttr, TargetSpecificAttr { +def DLLExport : InheritableAttr, TargetSpecificAttr { let Spellings = [Declspec<"dllexport">, GCC<"dllexport">]; let Subjects = SubjectList<[Function, Var]>; let Documentation = [Undocumented]; } -def DLLImport : InheritableAttr, TargetSpecificAttr { +def DLLImport : InheritableAttr, TargetSpecificAttr { let Spellings = [Declspec<"dllimport">, GCC<"dllimport">]; // Technically, the subjects for DllImport are Function and Var, but there is // custom semantic handling required when MicrosoftExt is true. diff --git a/test/CodeGen/windows-on-arm-dllimport-dllexport.c b/test/CodeGen/windows-on-arm-dllimport-dllexport.c new file mode 100644 index 0000000000..897d06a729 --- /dev/null +++ b/test/CodeGen/windows-on-arm-dllimport-dllexport.c @@ -0,0 +1,25 @@ +// RUN: %clang_cc1 -Werror -triple thumbv7-windows-itanium -mfloat-abi hard -emit-llvm %s -o - | FileCheck %s + +__declspec(dllexport) int export_int; + +__declspec(dllimport) int import_int; + +__declspec(dllexport) void export_declared_function(); + +__declspec(dllexport) void export_implemented_function() { +} + +__declspec(dllimport) void import_function(int); + +void call_imported_function() { + export_declared_function(); + return import_function(import_int); +} + +// CHECK: @import_int = external dllimport global i32 +// CHECK: @export_int = common dllexport global i32 0, align 4 + +// CHECK: define dllexport arm_aapcs_vfpcc void @export_implemented_function() + +// CHECK: declare dllimport arm_aapcs_vfpcc void @import_function(i32) +