diff options
author | Saleem Abdulrasool <compnerd@compnerd.org> | 2016-06-01 04:22:24 +0000 |
---|---|---|
committer | Saleem Abdulrasool <compnerd@compnerd.org> | 2016-06-01 04:22:24 +0000 |
commit | 4976634208d783dcaf1bc1d20dab7437f4449157 (patch) | |
tree | d1712f4a4ed4453a692a31071e87ec0d880d325a /clang/test/CodeGen/cfstring-windows.c | |
parent | b326986de02850926631480f58e75f1fda7f4752 (diff) | |
download | bcm5719-llvm-4976634208d783dcaf1bc1d20dab7437f4449157.tar.gz bcm5719-llvm-4976634208d783dcaf1bc1d20dab7437f4449157.zip |
CodeGen: tweak CFString emission for COFF targets
The `isa' member was previously not given the correct DLL Storage. Ensure that
we give the `isa' constant `__CFConstantStringClassReference' the correct DLL
storage. Default to dllimport unless an explicit specification gives it a
dllexport storage.
llvm-svn: 271361
Diffstat (limited to 'clang/test/CodeGen/cfstring-windows.c')
-rw-r--r-- | clang/test/CodeGen/cfstring-windows.c | 40 |
1 files changed, 40 insertions, 0 deletions
diff --git a/clang/test/CodeGen/cfstring-windows.c b/clang/test/CodeGen/cfstring-windows.c new file mode 100644 index 00000000000..e54c8608907 --- /dev/null +++ b/clang/test/CodeGen/cfstring-windows.c @@ -0,0 +1,40 @@ +// RUN: %clang_cc1 -triple thumbv7-windows -fdeclspec -DCF_BUILDING_CF -DDECL -S -emit-llvm %s -o - | FileCheck %s -check-prefix CHECK-CF-IN-CF-DECL +// RUN: %clang_cc1 -triple thumbv7-windows -fdeclspec -DCF_BUILDING_CF -DDEFN -S -emit-llvm %s -o - | FileCheck %s -check-prefix CHECK-CF-IN-CF-DEFN +// RUN: %clang_cc1 -triple thumbv7-windows -fdeclspec -S -emit-llvm %s -o - | FileCheck %s -check-prefix CHECK-CF +// RUN: %clang_cc1 -triple thumbv7-windows -fdeclspec -DEXTERN -S -emit-llvm %s -o - | FileCheck %s -check-prefix CHECK-CF-EXTERN +// RUN: %clang_cc1 -triple thumbv7-windows -fdeclspec -DEXTERN_DLLIMPORT -S -emit-llvm %s -o - | FileCheck %s -check-prefix CHECK-CF-EXTERN-DLLIMPORT +// RUN: %clang_cc1 -triple thumbv7-windows -fdeclspec -DDLLIMPORT -S -emit-llvm %s -o - | FileCheck %s -check-prefix CHECK-CF-DLLIMPORT + +// RUN: %clang_cc1 -Os -triple thumbv7-windows -fdeclspec -DCF_BUILDING_CF -DDECL -S -emit-llvm %s -o - | FileCheck %s -check-prefix CHECK-CF-IN-CF-DECL +// RUN: %clang_cc1 -Os -triple thumbv7-windows -fdeclspec -DCF_BUILDING_CF -DDEFN -S -emit-llvm %s -o - | FileCheck %s -check-prefix CHECK-CF-IN-CF-DEFN +// RUN: %clang_cc1 -Os -triple thumbv7-windows -fdeclspec -S -emit-llvm %s -o - | FileCheck %s -check-prefix CHECK-CF +// RUN: %clang_cc1 -Os -triple thumbv7-windows -fdeclspec -DEXTERN -S -emit-llvm %s -o - | FileCheck %s -check-prefix CHECK-CF-EXTERN +// RUN: %clang_cc1 -Os -triple thumbv7-windows -fdeclspec -DEXTERN_DLLIMPORT -S -emit-llvm %s -o - | FileCheck %s -check-prefix CHECK-CF-EXTERN-DLLIMPORT +// RUN: %clang_cc1 -Os -triple thumbv7-windows -fdeclspec -DDLLIMPORT -S -emit-llvm %s -o - | FileCheck %s -check-prefix CHECK-CF-DLLIMPORT + +#if defined(CF_BUILDING_CF) +#if defined(DECL) +extern __declspec(dllexport) long __CFConstantStringClassReference[]; +#elif defined(DEFN) +__declspec(dllexport) long __CFConstantStringClassReference[32]; +#endif +#else +#if defined(EXTERN) +extern long __CFConstantStringClassReference[]; +#elif defined(EXTERN_DLLIMPORT) +extern __declspec(dllimport) long __CFConstantStringClassReference[]; +#elif defined(DLLIMPORT) +__declspec(dllimport) long __CFConstantStringClassReference[]; +#endif +#endif + +typedef struct __CFString *CFStringRef; +const CFStringRef string = (CFStringRef)__builtin___CFStringMakeConstantString("string"); + +// CHECK-CF-IN-CF-DECL: @__CFConstantStringClassReference = external dllexport global [0 x i32] +// CHECK-CF-IN-CF-DEFN: @__CFConstantStringClassReference = common dllexport global [32 x i32] +// CHECK-CF: @__CFConstantStringClassReference = external dllimport global [0 x i32] +// CHECK-CF-EXTERN: @__CFConstantStringClassReference = external dllimport global [0 x i32] +// CHECK-CF-EXTERN-DLLIMPORT: @__CFConstantStringClassReference = external dllimport global [0 x i32] +// CHECK-CF-DLLIMPORT: @__CFConstantStringClassReference = external dllimport global [0 x i32] + |