1*67e74705SXin Li // RUN: %clang_cc1 -emit-llvm -triple=i386-pc-win32 -fms-compatibility %s -o - | FileCheck %s 2*67e74705SXin Li 3*67e74705SXin Li enum Enum { zero, one, two }; 4*67e74705SXin Li 5*67e74705SXin Li struct __declspec(dllexport) S { 6*67e74705SXin Li // In MS compatibility mode, this counts as a definition. 7*67e74705SXin Li // Since it is exported, it must be emitted even if it's unreferenced. 8*67e74705SXin Li static const short x = 42; 9*67e74705SXin Li 10*67e74705SXin Li // This works for enums too. 11*67e74705SXin Li static const Enum y = two; 12*67e74705SXin Li 13*67e74705SXin Li struct NonExported { 14*67e74705SXin Li // dllexport is not inherited by this nested class. 15*67e74705SXin Li // Since z is not referenced, it should not be emitted. 16*67e74705SXin Li static const int z = 42; 17*67e74705SXin Li }; 18*67e74705SXin Li }; 19*67e74705SXin Li 20*67e74705SXin Li // CHECK: @"\01?x@S@@2FB" = weak_odr dllexport constant i16 42, comdat, align 2 21*67e74705SXin Li // CHECK: @"\01?y@S@@2W4Enum@@B" = weak_odr dllexport constant i32 2, comdat, align 4 22*67e74705SXin Li // CHECK-NOT: NonExported 23