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 | |
104 | typedef __builtin_va_list va_list; |
105 | typedef __SIZE_TYPE__ size_t; |
106 | typedef __PTRDIFF_TYPE__ ptrdiff_t; |
107 | typedef __WCHAR_TYPE__ wchar_t; |
108 | |
109 | // CHECK: @align_c = dso_local global i32 1 |
110 | int align_c = __alignof(char); |
111 | |
112 | // CHECK: @align_s = dso_local global i32 2 |
113 | int align_s = __alignof(short); |
114 | |
115 | // CHECK: @align_i = dso_local global i32 4 |
116 | int align_i = __alignof(int); |
117 | |
118 | // CHECK: @align_wc = dso_local global i32 4 |
119 | int align_wc = __alignof(wchar_t); |
120 | |
121 | // CHECK: @align_l = dso_local global i32 4 |
122 | int align_l = __alignof(long); |
123 | |
124 | // CHECK: @align_ll = dso_local global i32 8 |
125 | int align_ll = __alignof(long long); |
126 | |
127 | // CHECK: @align_p = dso_local global i32 4 |
128 | int align_p = __alignof(void*); |
129 | |
130 | // CHECK: @align_f = dso_local global i32 4 |
131 | int align_f = __alignof(float); |
132 | |
133 | // CHECK: @align_d = dso_local global i32 8 |
134 | int align_d = __alignof(double); |
135 | |
136 | // CHECK: @align_ld = dso_local global i32 16 |
137 | int align_ld = __alignof(long double); |
138 | |
139 | // CHECK: @align_vl = dso_local global i32 4 |
140 | int align_vl = __alignof(va_list); |
141 | |
142 | // Check types |
143 | |
144 | // CHECK: zeroext i8 @check_char() |
145 | char check_char() { return 0; } |
146 | |
147 | // CHECK: define dso_local signext i16 @check_short() |
148 | short check_short() { return 0; } |
149 | |
150 | // CHECK: define dso_local i32 @check_int() |
151 | int check_int() { return 0; } |
152 | |
153 | // CHECK: define dso_local i32 @check_wchar_t() |
154 | int check_wchar_t() { return 0; } |
155 | |
156 | // CHECK: define dso_local i32 @check_long() |
157 | long check_long() { return 0; } |
158 | |
159 | // CHECK: define dso_local i64 @check_longlong() |
160 | long long check_longlong() { return 0; } |
161 | |
162 | // CHECK: define dso_local zeroext i8 @check_uchar() |
163 | unsigned char check_uchar() { return 0; } |
164 | |
165 | // CHECK: define dso_local zeroext i16 @check_ushort() |
166 | unsigned short check_ushort() { return 0; } |
167 | |
168 | // CHECK: define dso_local i32 @check_uint() |
169 | unsigned int check_uint() { return 0; } |
170 | |
171 | // CHECK: define dso_local i32 @check_ulong() |
172 | unsigned long check_ulong() { return 0; } |
173 | |
174 | // CHECK: define dso_local i64 @check_ulonglong() |
175 | unsigned long long check_ulonglong() { return 0; } |
176 | |
177 | // CHECK: define dso_local i32 @check_size_t() |
178 | size_t check_size_t() { return 0; } |
179 | |
180 | // CHECK: define dso_local float @check_float() |
181 | float check_float() { return 0; } |
182 | |
183 | // CHECK: define dso_local double @check_double() |
184 | double check_double() { return 0; } |
185 | |
186 | // CHECK: define dso_local fp128 @check_longdouble() |
187 | long double check_longdouble() { return 0; } |
188 | |