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