summaryrefslogtreecommitdiffstats
path: root/clang/test/CodeGenCXX/ms-integer-static-data-members-exported.cpp
diff options
context:
space:
mode:
authorHans Wennborg <hans@hanshq.net>2014-07-17 20:25:23 +0000
committerHans Wennborg <hans@hanshq.net>2014-07-17 20:25:23 +0000
commit56fc62bf01a8f2a9ff9590fa768b3e9ff7ad4c0b (patch)
tree94ac98dbb80b5a6523aa4afa15c241b006d0759f /clang/test/CodeGenCXX/ms-integer-static-data-members-exported.cpp
parent42f79dbf02545fb36c78b07ccb89e61ab2f50e03 (diff)
downloadbcm5719-llvm-56fc62bf01a8f2a9ff9590fa768b3e9ff7ad4c0b.tar.gz
bcm5719-llvm-56fc62bf01a8f2a9ff9590fa768b3e9ff7ad4c0b.zip
MS compatibility: always emit dllexported in-class initialized static data members (PR20140)
This makes us emit dllexported in-class initialized static data members (which are treated as definitions in MSVC), even when they're not referenced. It also makes their special linkage reflected in the GVA linkage instead of getting massaged in CodeGen. Differential Revision: http://reviews.llvm.org/D4563 llvm-svn: 213304
Diffstat (limited to 'clang/test/CodeGenCXX/ms-integer-static-data-members-exported.cpp')
-rw-r--r--clang/test/CodeGenCXX/ms-integer-static-data-members-exported.cpp22
1 files changed, 22 insertions, 0 deletions
diff --git a/clang/test/CodeGenCXX/ms-integer-static-data-members-exported.cpp b/clang/test/CodeGenCXX/ms-integer-static-data-members-exported.cpp
new file mode 100644
index 00000000000..3f868f36ff6
--- /dev/null
+++ b/clang/test/CodeGenCXX/ms-integer-static-data-members-exported.cpp
@@ -0,0 +1,22 @@
+// RUN: %clang_cc1 -emit-llvm -triple=i386-pc-win32 -fms-compatibility %s -o - | FileCheck %s
+
+enum Enum { zero, one, two };
+
+struct __declspec(dllexport) S {
+ // In MS compatibility mode, this counts as a definition.
+ // Since it is exported, it must be emitted even if it's unreferenced.
+ static const short x = 42;
+
+ // This works for enums too.
+ static const Enum y = two;
+
+ struct NonExported {
+ // dllexport is not inherited by this nested class.
+ // Since z is not referenced, it should not be emitted.
+ static const int z = 42;
+ };
+};
+
+// CHECK: @"\01?x@S@@2FB" = weak_odr dllexport constant i16 42, align 2
+// CHECK: @"\01?y@S@@2W4Enum@@B" = weak_odr dllexport constant i32 2, align 4
+// CHECK-NOT: NonExported
OpenPOWER on IntegriCloud