diff options
author | Hans Wennborg <hans@hanshq.net> | 2014-07-17 20:25:23 +0000 |
---|---|---|
committer | Hans Wennborg <hans@hanshq.net> | 2014-07-17 20:25:23 +0000 |
commit | 56fc62bf01a8f2a9ff9590fa768b3e9ff7ad4c0b (patch) | |
tree | 94ac98dbb80b5a6523aa4afa15c241b006d0759f /clang/test/CodeGenCXX/ms-integer-static-data-members-exported.cpp | |
parent | 42f79dbf02545fb36c78b07ccb89e61ab2f50e03 (diff) | |
download | bcm5719-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.cpp | 22 |
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 |