diff options
author | Dimitry Andric <dim@FreeBSD.org> | 2015-05-27 18:47:56 +0000 |
---|---|---|
committer | Dimitry Andric <dim@FreeBSD.org> | 2015-05-27 18:47:56 +0000 |
commit | 5e20cdd81c44a443562a09007668ffdf76c455af (patch) | |
tree | dbbd4047878da71c1a706e26ce05b4e7791b14cc /test/CodeGenCXX/ms-integer-static-data-members.cpp | |
parent | d5f23b0b7528b5c3caed1ba14f897cc4aaa9e3c3 (diff) |
Notes
Diffstat (limited to 'test/CodeGenCXX/ms-integer-static-data-members.cpp')
-rw-r--r-- | test/CodeGenCXX/ms-integer-static-data-members.cpp | 63 |
1 files changed, 40 insertions, 23 deletions
diff --git a/test/CodeGenCXX/ms-integer-static-data-members.cpp b/test/CodeGenCXX/ms-integer-static-data-members.cpp index b02b679d71a13..5e5b81d4a5911 100644 --- a/test/CodeGenCXX/ms-integer-static-data-members.cpp +++ b/test/CodeGenCXX/ms-integer-static-data-members.cpp @@ -1,35 +1,52 @@ // RUN: %clang_cc1 -emit-llvm -triple=i386-pc-win32 -fms-compatibility %s -o - | FileCheck %s -// RUN: %clang_cc1 -DINLINE_INIT -emit-llvm -triple=i386-pc-win32 -fms-compatibility %s -o - | FileCheck %s --check-prefix=CHECK-INLINE -// RUN: %clang_cc1 -DREAL_DEFINITION -emit-llvm -triple=i386-pc-win32 -fms-compatibility %s -o - | FileCheck %s --check-prefix=CHECK-OUTOFLINE -// RUN: %clang_cc1 -DINLINE_INIT -DREAL_DEFINITION -emit-llvm -triple=i386-pc-win32 -fms-compatibility %s -o - | FileCheck %s --check-prefix=CHECK-INLINE struct S { - // For MS ABI, we emit a linkonce_odr definition here, even though it's really just a declaration. -#ifdef INLINE_INIT - static const int x = 5; -#else - static const int x; -#endif + static const int NoInit_Ref; + static const int Inline_NotDef_NotRef = 5; + static const int Inline_NotDef_Ref = 5; + static const int Inline_Def_NotRef = 5; + static const int Inline_Def_Ref = 5; + static const int OutOfLine_Def_NotRef; + static const int OutOfLine_Def_Ref; }; -const int *f() { - return &S::x; +const int *foo1() { + return &S::NoInit_Ref; }; -#ifdef REAL_DEFINITION -#ifdef INLINE_INIT -const int S::x; -#else -const int S::x = 5; -#endif -#endif +const int *foo2() { + return &S::Inline_NotDef_Ref; +}; + +const int *foo3() { + return &S::Inline_Def_Ref; +}; +const int *foo4() { + return &S::OutOfLine_Def_Ref; +}; -// Inline initialization. -// CHECK-INLINE: @"\01?x@S@@2HB" = linkonce_odr constant i32 5, align 4 +const int S::Inline_Def_NotRef; +const int S::Inline_Def_Ref; +const int S::OutOfLine_Def_NotRef = 5; +const int S::OutOfLine_Def_Ref = 5; -// Out-of-line initialization. -// CHECK-OUTOFLINE: @"\01?x@S@@2HB" = constant i32 5, align 4 // No initialization. -// CHECK: @"\01?x@S@@2HB" = external constant i32 +// CHECK-DAG: @"\01?NoInit_Ref@S@@2HB" = external constant i32 + +// Inline initialization, no real definiton, not referenced. +// CHECK-NOT: @"\01?Inline_NotDef_NotRef@S@@2HB" = {{.*}} constant i32 5 + +// Inline initialization, no real definiton, referenced. +// CHECK-DAG: @"\01?Inline_NotDef_Ref@S@@2HB" = linkonce_odr constant i32 5, comdat, align 4 + +// Inline initialization, real definiton, not referenced. +// CHECK-DAG: @"\01?Inline_Def_NotRef@S@@2HB" = constant i32 5, align 4 + +// Inline initialization, real definiton, referenced. +// CHECK-DAG: @"\01?Inline_Def_Ref@S@@2HB" = constant i32 5, comdat, align 4 + +// Out-of-line initialization. +// CHECK-DAG: @"\01?OutOfLine_Def_NotRef@S@@2HB" = constant i32 5, align 4 +// CHECK-DAG: @"\01?OutOfLine_Def_Ref@S@@2HB" = constant i32 5, align 4 |