diff options
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 b02b679..5e5b81d 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 |