16bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// RUN: %clang_cc1 -emit-llvm -fms-extensions -xc++ -o - < %s | FileCheck %s 231a07b8e636aa276506318670170ede3d13c4019Nick Lewycky 36bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines#ifdef __cplusplus 46bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hinesextern "C" { 56bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines#endif 66bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines#pragma const_seg(".my_const") 76bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines#pragma bss_seg(".my_bss") 86bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hinesint D = 1; 96bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines#pragma data_seg(".data") 106bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hinesint a = 1; 116bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines#pragma data_seg(push, label, ".data2") 126bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hinesextern const int b; 136bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hinesconst int b = 1; 146bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hinesconst char* s = "my string!"; 156bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines#pragma data_seg(push, ".my_seg") 166bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hinesint c = 1; 176bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines#pragma data_seg(pop, label) 186bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hinesint d = 1; 196bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hinesint e; 206bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines#pragma bss_seg(".c") 216bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hinesint f; 226bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hinesvoid g(void){} 236bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines#pragma code_seg(".my_code") 246bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hinesvoid h(void){} 256bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines#pragma bss_seg() 266bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hinesint i; 276bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines#pragma bss_seg(".bss1") 286bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines#pragma bss_seg(push, test, ".bss2") 296bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines#pragma bss_seg() 306bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines#pragma bss_seg() 316bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hinesint TEST1; 326bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines#pragma bss_seg(pop) 336bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hinesint TEST2; 346bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines#ifdef __cplusplus 356bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines} 366bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines#endif 37ff05979144fc199e229aaeb1d248867d87d0d866Nick Lewycky 386bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines//CHECK: @D = global i32 1 396bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines//CHECK: @a = global i32 1, section ".data" 406bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines//CHECK: @b = constant i32 1, section ".my_const" 416bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines//CHECK: @[[MYSTR:.*]] = {{.*}} unnamed_addr constant [11 x i8] c"my string!\00" 426bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines//CHECK: @s = global i8* getelementptr inbounds ([11 x i8]* @[[MYSTR]], i32 0, i32 0), section ".data2" 436bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines//CHECK: @c = global i32 1, section ".my_seg" 446bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines//CHECK: @d = global i32 1, section ".data" 456bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines//CHECK: @e = global i32 0, section ".my_bss" 466bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines//CHECK: @f = global i32 0, section ".c" 476bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines//CHECK: @i = global i32 0 486bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines//CHECK: @TEST1 = global i32 0 496bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines//CHECK: @TEST2 = global i32 0, section ".bss1" 506bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines//CHECK: define void @g() 516bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines//CHECK: define void @h() {{.*}} section ".my_code" 52