1// RUN: %clang_cc1 -emit-llvm -fms-extensions -xc++ -o - < %s | FileCheck %s
2
3#ifdef __cplusplus
4extern "C" {
5#endif
6#pragma const_seg(".my_const")
7#pragma bss_seg(".my_bss")
8int D = 1;
9#pragma data_seg(".data")
10int a = 1;
11#pragma data_seg(push, label, ".data2")
12extern const int b;
13const int b = 1;
14const char* s = "my string!";
15#pragma data_seg(push, ".my_seg")
16int c = 1;
17#pragma data_seg(pop, label)
18int d = 1;
19int e;
20#pragma bss_seg(".c")
21int f;
22void g(void){}
23#pragma code_seg(".my_code")
24void h(void){}
25#pragma bss_seg()
26int i;
27#pragma bss_seg(".bss1")
28#pragma bss_seg(push, test, ".bss2")
29#pragma bss_seg()
30#pragma bss_seg()
31int TEST1;
32#pragma bss_seg(pop)
33int TEST2;
34#ifdef __cplusplus
35}
36#endif
37
38//CHECK: @D = global i32 1
39//CHECK: @a = global i32 1, section ".data"
40//CHECK: @b = constant i32 1, section ".my_const"
41//CHECK: @[[MYSTR:.*]] = {{.*}} unnamed_addr constant [11 x i8] c"my string!\00"
42//CHECK: @s = global i8* getelementptr inbounds ([11 x i8]* @[[MYSTR]], i32 0, i32 0), section ".data2"
43//CHECK: @c = global i32 1, section ".my_seg"
44//CHECK: @d = global i32 1, section ".data"
45//CHECK: @e = global i32 0, section ".my_bss"
46//CHECK: @f = global i32 0, section ".c"
47//CHECK: @i = global i32 0
48//CHECK: @TEST1 = global i32 0
49//CHECK: @TEST2 = global i32 0, section ".bss1"
50//CHECK: define void @g()
51//CHECK: define void @h() {{.*}} section ".my_code"
52