teak-llvm/clang/test/CodeGenCXX/ms-integer-static-data-members-exported.cpp
Hans Wennborg 56fc62bf01 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
2014-07-17 20:25:23 +00:00

23 lines
736 B
C++

// 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