Clang Project

clang_source_code/test/Driver/riscv32-toolchain.c
1// A basic clang -cc1 command-line, and simple environment check.
2
3// RUN: %clang %s -### -no-canonical-prefixes -target riscv32 2>&1 | FileCheck -check-prefix=CC1 %s
4// CC1: clang{{.*}} "-cc1" "-triple" "riscv32"
5
6// RUN: %clang %s -### -no-canonical-prefixes \
7// RUN:   -target riscv32-unknown-elf \
8// RUN:   --gcc-toolchain=%S/Inputs/basic_riscv32_tree \
9// RUN:   --sysroot=%S/Inputs/basic_riscv32_tree/riscv32-unknown-elf 2>&1 \
10// RUN:   | FileCheck -check-prefix=C-RV32-BAREMETAL-ILP32 %s
11
12// C-RV32-BAREMETAL-ILP32: "-fuse-init-array"
13// C-RV32-BAREMETAL-ILP32: "{{.*}}Inputs/basic_riscv32_tree/lib/gcc/riscv32-unknown-elf/8.0.1/../../../../bin{{/|\\\\}}riscv32-unknown-elf-ld"
14// C-RV32-BAREMETAL-ILP32: "--sysroot={{.*}}/Inputs/basic_riscv32_tree/riscv32-unknown-elf"
15// C-RV32-BAREMETAL-ILP32: "{{.*}}/Inputs/basic_riscv32_tree/riscv32-unknown-elf/lib{{/|\\\\}}crt0.o"
16// C-RV32-BAREMETAL-ILP32: "{{.*}}/Inputs/basic_riscv32_tree/lib/gcc/riscv32-unknown-elf/8.0.1{{/|\\\\}}crtbegin.o"
17// C-RV32-BAREMETAL-ILP32: "-L{{.*}}/Inputs/basic_riscv32_tree/riscv32-unknown-elf/lib"
18// C-RV32-BAREMETAL-ILP32: "-L{{.*}}/Inputs/basic_riscv32_tree/lib/gcc/riscv32-unknown-elf/8.0.1"
19// C-RV32-BAREMETAL-ILP32: "--start-group" "-lc" "-lgloss" "--end-group" "-lgcc"
20// C-RV32-BAREMETAL-ILP32: "{{.*}}/Inputs/basic_riscv32_tree/lib/gcc/riscv32-unknown-elf/8.0.1{{/|\\\\}}crtend.o"
21
22// RUN: %clang %s -### -no-canonical-prefixes \
23// RUN:   -target riscv32-unknown-elf \
24// RUN:   --sysroot= \
25// RUN:   --gcc-toolchain=%S/Inputs/basic_riscv32_tree 2>&1 \
26// RUN:   | FileCheck -check-prefix=C-RV32-BAREMETAL-NOSYSROOT-ILP32 %s
27
28// C-RV32-BAREMETAL-NOSYSROOT-ILP32: "-fuse-init-array"
29// C-RV32-BAREMETAL-NOSYSROOT-ILP32: "{{.*}}Inputs/basic_riscv32_tree/lib/gcc/riscv32-unknown-elf/8.0.1/../../../../bin{{/|\\\\}}riscv32-unknown-elf-ld"
30// C-RV32-BAREMETAL-NOSYSROOT-ILP32: "{{.*}}/Inputs/basic_riscv32_tree/lib/gcc/riscv32-unknown-elf/8.0.1/../../../../riscv32-unknown-elf/lib{{/|\\\\}}crt0.o"
31// C-RV32-BAREMETAL-NOSYSROOT-ILP32: "{{.*}}/Inputs/basic_riscv32_tree/lib/gcc/riscv32-unknown-elf/8.0.1{{/|\\\\}}crtbegin.o"
32// C-RV32-BAREMETAL-NOSYSROOT-ILP32: "-L{{.*}}/Inputs/basic_riscv32_tree/lib/gcc/riscv32-unknown-elf/8.0.1/../../../../riscv32-unknown-elf{{/|\\\\}}lib"
33// C-RV32-BAREMETAL-NOSYSROOT-ILP32: "-L{{.*}}/Inputs/basic_riscv32_tree/lib/gcc/riscv32-unknown-elf/8.0.1"
34// C-RV32-BAREMETAL-NOSYSROOT-ILP32: "--start-group" "-lc" "-lgloss" "--end-group" "-lgcc"
35// C-RV32-BAREMETAL-NOSYSROOT-ILP32: "{{.*}}/Inputs/basic_riscv32_tree/lib/gcc/riscv32-unknown-elf/8.0.1{{/|\\\\}}crtend.o"
36
37// RUN: %clangxx %s -### -no-canonical-prefixes \
38// RUN:   -target riscv32-unknown-elf -stdlib=libstdc++ \
39// RUN:   --gcc-toolchain=%S/Inputs/basic_riscv32_tree \
40// RUN:   --sysroot=%S/Inputs/basic_riscv32_tree/riscv32-unknown-elf 2>&1 \
41// RUN:   | FileCheck -check-prefix=CXX-RV32-BAREMETAL-ILP32 %s
42
43// CXX-RV32-BAREMETAL-ILP32: "-fuse-init-array"
44// CXX-RV32-BAREMETAL-ILP32: "-internal-isystem" "{{.*}}Inputs/basic_riscv32_tree/riscv32-unknown-elf/include/c++{{/|\\\\}}8.0.1"
45// CXX-RV32-BAREMETAL-ILP32: "{{.*}}Inputs/basic_riscv32_tree/lib/gcc/riscv32-unknown-elf/8.0.1/../../../../bin{{/|\\\\}}riscv32-unknown-elf-ld"
46// CXX-RV32-BAREMETAL-ILP32: "--sysroot={{.*}}/Inputs/basic_riscv32_tree/riscv32-unknown-elf"
47// CXX-RV32-BAREMETAL-ILP32: "{{.*}}/Inputs/basic_riscv32_tree/riscv32-unknown-elf/lib{{/|\\\\}}crt0.o"
48// CXX-RV32-BAREMETAL-ILP32: "{{.*}}/Inputs/basic_riscv32_tree/lib/gcc/riscv32-unknown-elf/8.0.1{{/|\\\\}}crtbegin.o"
49// CXX-RV32-BAREMETAL-ILP32: "-L{{.*}}/Inputs/basic_riscv32_tree/riscv32-unknown-elf/lib"
50// CXX-RV32-BAREMETAL-ILP32: "-L{{.*}}/Inputs/basic_riscv32_tree/lib/gcc/riscv32-unknown-elf/8.0.1"
51// CXX-RV32-BAREMETAL-ILP32: "-lstdc++" "--start-group" "-lc" "-lgloss" "--end-group" "-lgcc"
52// CXX-RV32-BAREMETAL-ILP32: "{{.*}}/Inputs/basic_riscv32_tree/lib/gcc/riscv32-unknown-elf/8.0.1{{/|\\\\}}crtend.o"
53
54// RUN: %clangxx %s -### -no-canonical-prefixes \
55// RUN:   -target riscv32-unknown-elf -stdlib=libstdc++ \
56// RUN:   --sysroot= \
57// RUN:   --gcc-toolchain=%S/Inputs/basic_riscv32_tree 2>&1 \
58// RUN:   | FileCheck -check-prefix=CXX-RV32-BAREMETAL-NOSYSROOT-ILP32 %s
59
60// CXX-RV32-BAREMETAL-NOSYSROOT-ILP32: "-fuse-init-array"
61// CXX-RV32-BAREMETAL-NOSYSROOT-ILP32: "-internal-isystem" "{{.*}}Inputs/basic_riscv32_tree/lib/gcc/riscv32-unknown-elf/8.0.1/../../../../riscv32-unknown-elf/include/c++{{/|\\\\}}8.0.1"
62// CXX-RV32-BAREMETAL-NOSYSROOT-ILP32: "{{.*}}Inputs/basic_riscv32_tree/lib/gcc/riscv32-unknown-elf/8.0.1/../../../../bin{{/|\\\\}}riscv32-unknown-elf-ld"
63// CXX-RV32-BAREMETAL-NOSYSROOT-ILP32: "{{.*}}/Inputs/basic_riscv32_tree/lib/gcc/riscv32-unknown-elf/8.0.1/../../../../riscv32-unknown-elf/lib{{/|\\\\}}crt0.o"
64// CXX-RV32-BAREMETAL-NOSYSROOT-ILP32: "{{.*}}/Inputs/basic_riscv32_tree/lib/gcc/riscv32-unknown-elf/8.0.1{{/|\\\\}}crtbegin.o"
65// CXX-RV32-BAREMETAL-NOSYSROOT-ILP32: "-L{{.*}}/Inputs/basic_riscv32_tree/lib/gcc/riscv32-unknown-elf/8.0.1/../../../../riscv32-unknown-elf/lib"
66// CXX-RV32-BAREMETAL-NOSYSROOT-ILP32: "-L{{.*}}/Inputs/basic_riscv32_tree/lib/gcc/riscv32-unknown-elf/8.0.1"
67// CXX-RV32-BAREMETAL-NOSYSROOT-ILP32: "-lstdc++" "--start-group" "-lc" "-lgloss" "--end-group" "-lgcc"
68// CXX-RV32-BAREMETAL-NOSYSROOT-ILP32: "{{.*}}/Inputs/basic_riscv32_tree/lib/gcc/riscv32-unknown-elf/8.0.1{{/|\\\\}}crtend.o"
69
70// RUN: %clang %s -### -no-canonical-prefixes -fuse-ld=ld \
71// RUN:   -target riscv32-linux-unknown-elf \
72// RUN:   --gcc-toolchain=%S/Inputs/multilib_riscv_linux_sdk \
73// RUN:   --sysroot=%S/Inputs/multilib_riscv_linux_sdk/sysroot 2>&1 \
74// RUN:   | FileCheck -check-prefix=C-RV32-LINUX-MULTI-ILP32 %s
75
76// C-RV32-LINUX-MULTI-ILP32: "-fuse-init-array"
77// C-RV32-LINUX-MULTI-ILP32: "{{.*}}/Inputs/multilib_riscv_linux_sdk/lib/gcc/riscv64-unknown-linux-gnu/7.2.0/../../../../riscv64-unknown-linux-gnu/bin{{/|\\\\}}ld"
78// C-RV32-LINUX-MULTI-ILP32: "--sysroot={{.*}}/Inputs/multilib_riscv_linux_sdk/sysroot"
79// C-RV32-LINUX-MULTI-ILP32: "-m" "elf32lriscv"
80// C-RV32-LINUX-MULTI-ILP32: "-dynamic-linker" "/lib/ld-linux-riscv32-ilp32.so.1"
81// C-RV32-LINUX-MULTI-ILP32: "{{.*}}/Inputs/multilib_riscv_linux_sdk/lib/gcc/riscv64-unknown-linux-gnu/7.2.0/lib32/ilp32{{/|\\\\}}crtbegin.o"
82// C-RV32-LINUX-MULTI-ILP32: "-L{{.*}}/Inputs/multilib_riscv_linux_sdk/lib/gcc/riscv64-unknown-linux-gnu/7.2.0/lib32/ilp32"
83// C-RV32-LINUX-MULTI-ILP32: "-L{{.*}}/Inputs/multilib_riscv_linux_sdk/sysroot/lib32/ilp32"
84// C-RV32-LINUX-MULTI-ILP32: "-L{{.*}}/Inputs/multilib_riscv_linux_sdk/sysroot/usr/lib32/ilp32"
85
86// RUN: %clang %s -### -no-canonical-prefixes -fuse-ld=ld \
87// RUN:   -target riscv32-linux-unknown-elf -march=rv32imafd -mabi=ilp32d \
88// RUN:   --gcc-toolchain=%S/Inputs/multilib_riscv_linux_sdk \
89// RUN:   --sysroot=%S/Inputs/multilib_riscv_linux_sdk/sysroot 2>&1 \
90// RUN:   | FileCheck -check-prefix=C-RV32-LINUX-MULTI-ILP32D %s
91
92// C-RV32-LINUX-MULTI-ILP32D: "-fuse-init-array"
93// C-RV32-LINUX-MULTI-ILP32D: "{{.*}}/Inputs/multilib_riscv_linux_sdk/lib/gcc/riscv64-unknown-linux-gnu/7.2.0/../../../../riscv64-unknown-linux-gnu/bin{{/|\\\\}}ld"
94// C-RV32-LINUX-MULTI-ILP32D: "--sysroot={{.*}}/Inputs/multilib_riscv_linux_sdk/sysroot"
95// C-RV32-LINUX-MULTI-ILP32D: "-m" "elf32lriscv"
96// C-RV32-LINUX-MULTI-ILP32D: "-dynamic-linker" "/lib/ld-linux-riscv32-ilp32d.so.1"
97// C-RV32-LINUX-MULTI-ILP32D: "{{.*}}/Inputs/multilib_riscv_linux_sdk/lib/gcc/riscv64-unknown-linux-gnu/7.2.0/lib32/ilp32d{{/|\\\\}}crtbegin.o"
98// C-RV32-LINUX-MULTI-ILP32D: "-L{{.*}}/Inputs/multilib_riscv_linux_sdk/lib/gcc/riscv64-unknown-linux-gnu/7.2.0/lib32/ilp32d"
99// C-RV32-LINUX-MULTI-ILP32D: "-L{{.*}}/Inputs/multilib_riscv_linux_sdk/sysroot/lib32/ilp32d"
100// C-RV32-LINUX-MULTI-ILP32D: "-L{{.*}}/Inputs/multilib_riscv_linux_sdk/sysroot/usr/lib32/ilp32d"
101
102// RUN: %clang -target riscv32 %s -emit-llvm -S -o - | FileCheck %s
103
104typedef __builtin_va_list va_list;
105typedef __SIZE_TYPE__ size_t;
106typedef __PTRDIFF_TYPE__ ptrdiff_t;
107typedef __WCHAR_TYPE__ wchar_t;
108
109// CHECK: @align_c = dso_local global i32 1
110int align_c = __alignof(char);
111
112// CHECK: @align_s = dso_local global i32 2
113int align_s = __alignof(short);
114
115// CHECK: @align_i = dso_local global i32 4
116int align_i = __alignof(int);
117
118// CHECK: @align_wc = dso_local global i32 4
119int align_wc = __alignof(wchar_t);
120
121// CHECK: @align_l = dso_local global i32 4
122int align_l = __alignof(long);
123
124// CHECK: @align_ll = dso_local global i32 8
125int align_ll = __alignof(long long);
126
127// CHECK: @align_p = dso_local global i32 4
128int align_p = __alignof(void*);
129
130// CHECK: @align_f = dso_local global i32 4
131int align_f = __alignof(float);
132
133// CHECK: @align_d = dso_local global i32 8
134int align_d = __alignof(double);
135
136// CHECK: @align_ld = dso_local global i32 16
137int align_ld = __alignof(long double);
138
139// CHECK: @align_vl = dso_local global i32 4
140int align_vl = __alignof(va_list);
141
142// Check types
143
144// CHECK: zeroext i8 @check_char()
145char check_char() { return 0; }
146
147// CHECK: define dso_local signext i16 @check_short()
148short check_short() { return 0; }
149
150// CHECK: define dso_local i32 @check_int()
151int check_int() { return 0; }
152
153// CHECK: define dso_local i32 @check_wchar_t()
154int check_wchar_t() { return 0; }
155
156// CHECK: define dso_local i32 @check_long()
157long check_long() { return 0; }
158
159// CHECK: define dso_local i64 @check_longlong()
160long long check_longlong() { return 0; }
161
162// CHECK: define dso_local zeroext i8 @check_uchar()
163unsigned char check_uchar() { return 0; }
164
165// CHECK: define dso_local zeroext i16 @check_ushort()
166unsigned short check_ushort() { return 0; }
167
168// CHECK: define dso_local i32 @check_uint()
169unsigned int check_uint() { return 0; }
170
171// CHECK: define dso_local i32 @check_ulong()
172unsigned long check_ulong() { return 0; }
173
174// CHECK: define dso_local i64 @check_ulonglong()
175unsigned long long check_ulonglong() { return 0; }
176
177// CHECK: define dso_local i32 @check_size_t()
178size_t check_size_t() { return 0; }
179
180// CHECK: define dso_local float @check_float()
181float check_float() { return 0; }
182
183// CHECK: define dso_local double @check_double()
184double check_double() { return 0; }
185
186// CHECK: define dso_local fp128 @check_longdouble()
187long double check_longdouble() { return 0; }
188