1 // A basic clang -cc1 command-line, and simple environment check.
2 // REQUIRES: platform-linker
3 
4 // RUN: %clang %s -### -no-canonical-prefixes -target riscv32 2>&1 | FileCheck -check-prefix=CC1 %s
5 // CC1: clang{{.*}} "-cc1" "-triple" "riscv32"
6 
7 // Test interaction with -fuse-ld=lld, if lld is available.
8 // RUN: %clang %s -### -no-canonical-prefixes -target riscv32 -fuse-ld=lld 2>&1 | FileCheck -check-prefix=LLD %s
9 // LLD: {{(error: invalid linker name in argument '-fuse-ld=lld')|(ld.lld)}}
10 
11 // In the below tests, --rtlib=platform is used so that the driver ignores
12 // the configure-time CLANG_DEFAULT_RTLIB option when choosing the runtime lib
13 
14 // RUN: %clang %s -### -no-canonical-prefixes \
15 // RUN:   -target riscv32-unknown-elf --rtlib=platform \
16 // RUN:   --gcc-toolchain=%S/Inputs/basic_riscv32_tree \
17 // RUN:   --sysroot=%S/Inputs/basic_riscv32_tree/riscv32-unknown-elf 2>&1 \
18 // RUN:   | FileCheck -check-prefix=C-RV32-BAREMETAL-ILP32 %s
19 
20 // C-RV32-BAREMETAL-ILP32: "{{.*}}Inputs/basic_riscv32_tree/lib/gcc/riscv32-unknown-elf/8.0.1/../../..{{/|\\\\}}..{{/|\\\\}}bin{{/|\\\\}}riscv32-unknown-elf-ld"
21 // C-RV32-BAREMETAL-ILP32: "--sysroot={{.*}}/Inputs/basic_riscv32_tree/riscv32-unknown-elf"
22 // C-RV32-BAREMETAL-ILP32: "{{.*}}/Inputs/basic_riscv32_tree/riscv32-unknown-elf/lib{{/|\\\\}}crt0.o"
23 // C-RV32-BAREMETAL-ILP32: "{{.*}}/Inputs/basic_riscv32_tree/lib/gcc/riscv32-unknown-elf/8.0.1{{/|\\\\}}crtbegin.o"
24 // C-RV32-BAREMETAL-ILP32: "-L{{.*}}/Inputs/basic_riscv32_tree/lib/gcc/riscv32-unknown-elf/8.0.1"
25 // C-RV32-BAREMETAL-ILP32: "-L{{.*}}/Inputs/basic_riscv32_tree/riscv32-unknown-elf/lib"
26 // C-RV32-BAREMETAL-ILP32: "--start-group" "-lc" "-lgloss" "--end-group" "-lgcc"
27 // C-RV32-BAREMETAL-ILP32: "{{.*}}/Inputs/basic_riscv32_tree/lib/gcc/riscv32-unknown-elf/8.0.1{{/|\\\\}}crtend.o"
28 
29 // RUN: %clang %s -### -no-canonical-prefixes \
30 // RUN:   -target riscv32-unknown-elf --rtlib=platform \
31 // RUN:   --sysroot= \
32 // RUN:   --gcc-toolchain=%S/Inputs/basic_riscv32_tree 2>&1 \
33 // RUN:   | FileCheck -check-prefix=C-RV32-BAREMETAL-NOSYSROOT-ILP32 %s
34 
35 // C-RV32-BAREMETAL-NOSYSROOT-ILP32: "{{.*}}Inputs/basic_riscv32_tree/lib/gcc/riscv32-unknown-elf/8.0.1/../../..{{/|\\\\}}..{{/|\\\\}}bin{{/|\\\\}}riscv32-unknown-elf-ld"
36 // C-RV32-BAREMETAL-NOSYSROOT-ILP32: "{{.*}}/Inputs/basic_riscv32_tree/lib/gcc/riscv32-unknown-elf/8.0.1/../../..{{/|\\\\}}..{{/|\\\\}}riscv32-unknown-elf/lib{{/|\\\\}}crt0.o"
37 // C-RV32-BAREMETAL-NOSYSROOT-ILP32: "{{.*}}/Inputs/basic_riscv32_tree/lib/gcc/riscv32-unknown-elf/8.0.1{{/|\\\\}}crtbegin.o"
38 // C-RV32-BAREMETAL-NOSYSROOT-ILP32: "-L{{.*}}/Inputs/basic_riscv32_tree/lib/gcc/riscv32-unknown-elf/8.0.1"
39 // C-RV32-BAREMETAL-NOSYSROOT-ILP32: "-L{{.*}}/Inputs/basic_riscv32_tree/lib/gcc/riscv32-unknown-elf/8.0.1/../../..{{/|\\\\}}..{{/|\\\\}}riscv32-unknown-elf{{/|\\\\}}lib"
40 // C-RV32-BAREMETAL-NOSYSROOT-ILP32: "--start-group" "-lc" "-lgloss" "--end-group" "-lgcc"
41 // C-RV32-BAREMETAL-NOSYSROOT-ILP32: "{{.*}}/Inputs/basic_riscv32_tree/lib/gcc/riscv32-unknown-elf/8.0.1{{/|\\\\}}crtend.o"
42 
43 // RUN: %clangxx %s -### -no-canonical-prefixes \
44 // RUN:   -target riscv32-unknown-elf -stdlib=libstdc++ --rtlib=platform \
45 // RUN:   --gcc-toolchain=%S/Inputs/basic_riscv32_tree \
46 // RUN:   --sysroot=%S/Inputs/basic_riscv32_tree/riscv32-unknown-elf 2>&1 \
47 // RUN:   | FileCheck -check-prefix=CXX-RV32-BAREMETAL-ILP32 %s
48 
49 // CXX-RV32-BAREMETAL-ILP32: "-internal-isystem" "{{.*}}Inputs/basic_riscv32_tree/riscv32-unknown-elf/include/c++{{/|\\\\}}8.0.1"
50 // CXX-RV32-BAREMETAL-ILP32: "{{.*}}Inputs/basic_riscv32_tree/lib/gcc/riscv32-unknown-elf/8.0.1/../../..{{/|\\\\}}..{{/|\\\\}}bin{{/|\\\\}}riscv32-unknown-elf-ld"
51 // CXX-RV32-BAREMETAL-ILP32: "--sysroot={{.*}}/Inputs/basic_riscv32_tree/riscv32-unknown-elf"
52 // CXX-RV32-BAREMETAL-ILP32: "{{.*}}/Inputs/basic_riscv32_tree/riscv32-unknown-elf/lib{{/|\\\\}}crt0.o"
53 // CXX-RV32-BAREMETAL-ILP32: "{{.*}}/Inputs/basic_riscv32_tree/lib/gcc/riscv32-unknown-elf/8.0.1{{/|\\\\}}crtbegin.o"
54 // CXX-RV32-BAREMETAL-ILP32: "-L{{.*}}/Inputs/basic_riscv32_tree/lib/gcc/riscv32-unknown-elf/8.0.1"
55 // CXX-RV32-BAREMETAL-ILP32: "-L{{.*}}/Inputs/basic_riscv32_tree/riscv32-unknown-elf/lib"
56 // CXX-RV32-BAREMETAL-ILP32: "-lstdc++" "--start-group" "-lc" "-lgloss" "--end-group" "-lgcc"
57 // CXX-RV32-BAREMETAL-ILP32: "{{.*}}/Inputs/basic_riscv32_tree/lib/gcc/riscv32-unknown-elf/8.0.1{{/|\\\\}}crtend.o"
58 
59 // RUN: %clangxx %s -### -no-canonical-prefixes \
60 // RUN:   -target riscv32-unknown-elf -stdlib=libstdc++ --rtlib=platform \
61 // RUN:   --sysroot= \
62 // RUN:   --gcc-toolchain=%S/Inputs/basic_riscv32_tree 2>&1 \
63 // RUN:   | FileCheck -check-prefix=CXX-RV32-BAREMETAL-NOSYSROOT-ILP32 %s
64 
65 // 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"
66 // CXX-RV32-BAREMETAL-NOSYSROOT-ILP32: "{{.*}}Inputs/basic_riscv32_tree/lib/gcc/riscv32-unknown-elf/8.0.1/../../..{{/|\\\\}}..{{/|\\\\}}bin{{/|\\\\}}riscv32-unknown-elf-ld"
67 // CXX-RV32-BAREMETAL-NOSYSROOT-ILP32: "{{.*}}/Inputs/basic_riscv32_tree/lib/gcc/riscv32-unknown-elf/8.0.1/../../..{{/|\\\\}}..{{/|\\\\}}riscv32-unknown-elf/lib{{/|\\\\}}crt0.o"
68 // CXX-RV32-BAREMETAL-NOSYSROOT-ILP32: "{{.*}}/Inputs/basic_riscv32_tree/lib/gcc/riscv32-unknown-elf/8.0.1{{/|\\\\}}crtbegin.o"
69 // CXX-RV32-BAREMETAL-NOSYSROOT-ILP32: "-L{{.*}}/Inputs/basic_riscv32_tree/lib/gcc/riscv32-unknown-elf/8.0.1"
70 // CXX-RV32-BAREMETAL-NOSYSROOT-ILP32: "-L{{.*}}/Inputs/basic_riscv32_tree/lib/gcc/riscv32-unknown-elf/8.0.1/../../..{{/|\\\\}}..{{/|\\\\}}riscv32-unknown-elf/lib"
71 // CXX-RV32-BAREMETAL-NOSYSROOT-ILP32: "-lstdc++" "--start-group" "-lc" "-lgloss" "--end-group" "-lgcc"
72 // CXX-RV32-BAREMETAL-NOSYSROOT-ILP32: "{{.*}}/Inputs/basic_riscv32_tree/lib/gcc/riscv32-unknown-elf/8.0.1{{/|\\\\}}crtend.o"
73 
74 // RUN: %clang %s -### -no-canonical-prefixes -fuse-ld=ld \
75 // RUN:   -target riscv32-unknown-linux-gnu --rtlib=platform -mabi=ilp32 \
76 // RUN:   --gcc-toolchain=%S/Inputs/multilib_riscv_linux_sdk \
77 // RUN:   --sysroot=%S/Inputs/multilib_riscv_linux_sdk/sysroot 2>&1 \
78 // RUN:   | FileCheck -check-prefix=C-RV32-LINUX-MULTI-ILP32 %s
79 
80 // 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"
81 // C-RV32-LINUX-MULTI-ILP32: "--sysroot={{.*}}/Inputs/multilib_riscv_linux_sdk/sysroot"
82 // C-RV32-LINUX-MULTI-ILP32: "-m" "elf32lriscv"
83 // C-RV32-LINUX-MULTI-ILP32: "-dynamic-linker" "/lib/ld-linux-riscv32-ilp32.so.1"
84 // C-RV32-LINUX-MULTI-ILP32: "{{.*}}/Inputs/multilib_riscv_linux_sdk/lib/gcc/riscv64-unknown-linux-gnu/7.2.0/lib32/ilp32{{/|\\\\}}crtbegin.o"
85 // C-RV32-LINUX-MULTI-ILP32: "-L{{.*}}/Inputs/multilib_riscv_linux_sdk/lib/gcc/riscv64-unknown-linux-gnu/7.2.0/lib32/ilp32"
86 // C-RV32-LINUX-MULTI-ILP32: "-L{{.*}}/Inputs/multilib_riscv_linux_sdk/sysroot/lib32/ilp32"
87 // C-RV32-LINUX-MULTI-ILP32: "-L{{.*}}/Inputs/multilib_riscv_linux_sdk/sysroot/usr/lib32/ilp32"
88 
89 // RUN: %clang %s -### -no-canonical-prefixes -fuse-ld=ld \
90 // RUN:   -target riscv32-unknown-linux-gnu --rtlib=platform -march=rv32imafd \
91 // RUN:   --gcc-toolchain=%S/Inputs/multilib_riscv_linux_sdk \
92 // RUN:   --sysroot=%S/Inputs/multilib_riscv_linux_sdk/sysroot 2>&1 \
93 // RUN:   | FileCheck -check-prefix=C-RV32-LINUX-MULTI-ILP32D %s
94 
95 // 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"
96 // C-RV32-LINUX-MULTI-ILP32D: "--sysroot={{.*}}/Inputs/multilib_riscv_linux_sdk/sysroot"
97 // C-RV32-LINUX-MULTI-ILP32D: "-m" "elf32lriscv"
98 // C-RV32-LINUX-MULTI-ILP32D: "-dynamic-linker" "/lib/ld-linux-riscv32-ilp32d.so.1"
99 // C-RV32-LINUX-MULTI-ILP32D: "{{.*}}/Inputs/multilib_riscv_linux_sdk/lib/gcc/riscv64-unknown-linux-gnu/7.2.0/lib32/ilp32d{{/|\\\\}}crtbegin.o"
100 // C-RV32-LINUX-MULTI-ILP32D: "-L{{.*}}/Inputs/multilib_riscv_linux_sdk/lib/gcc/riscv64-unknown-linux-gnu/7.2.0/lib32/ilp32d"
101 // C-RV32-LINUX-MULTI-ILP32D: "-L{{.*}}/Inputs/multilib_riscv_linux_sdk/sysroot/lib32/ilp32d"
102 // C-RV32-LINUX-MULTI-ILP32D: "-L{{.*}}/Inputs/multilib_riscv_linux_sdk/sysroot/usr/lib32/ilp32d"
103 
104 // RUN: %clang %s -### -no-canonical-prefixes -fuse-ld=ld \
105 // RUN:   -target riscv32-unknown-elf --rtlib=platform --sysroot= \
106 // RUN:   --gcc-toolchain=%S/Inputs/multilib_riscv_elf_sdk 2>&1 \
107 // RUN:   | FileCheck -check-prefix=C-RV32I-BAREMETAL-MULTI-ILP32 %s
108 
109 // C-RV32I-BAREMETAL-MULTI-ILP32: "{{.*}}/Inputs/multilib_riscv_elf_sdk/lib/gcc/riscv64-unknown-elf/8.2.0/../../..{{/|\\\\}}..{{/|\\\\}}riscv64-unknown-elf/bin{{/|\\\\}}ld"
110 // C-RV32I-BAREMETAL-MULTI-ILP32: "-m" "elf32lriscv"
111 // C-RV32I-BAREMETAL-MULTI-ILP32: "{{.*}}/Inputs/multilib_riscv_elf_sdk/lib/gcc/riscv64-unknown-elf/8.2.0/../../..{{/|\\\\}}..{{/|\\\\}}riscv64-unknown-elf/lib/rv32imac/ilp32{{/|\\\\}}crt0.o"
112 // C-RV32I-BAREMETAL-MULTI-ILP32: "{{.*}}/Inputs/multilib_riscv_elf_sdk/lib/gcc/riscv64-unknown-elf/8.2.0/rv32imac/ilp32{{/|\\\\}}crtbegin.o"
113 // C-RV32I-BAREMETAL-MULTI-ILP32: "-L{{.*}}/Inputs/multilib_riscv_elf_sdk/lib/gcc/riscv64-unknown-elf/8.2.0"
114 // C-RV32I-BAREMETAL-MULTI-ILP32: "-L{{.*}}/Inputs/multilib_riscv_elf_sdk/lib/gcc/riscv64-unknown-elf/8.2.0/../../..{{/|\\\\}}..{{/|\\\\}}riscv64-unknown-elf/lib"
115 // C-RV32I-BAREMETAL-MULTI-ILP32: "--start-group" "-lc" "-lgloss" "--end-group" "-lgcc"
116 // C-RV32I-BAREMETAL-MULTI-ILP32: "{{.*}}/Inputs/multilib_riscv_elf_sdk/lib/gcc/riscv64-unknown-elf/8.2.0/rv32imac/ilp32{{/|\\\\}}crtend.o"
117 
118 // RUN: %clang %s -### -no-canonical-prefixes -fuse-ld=ld \
119 // RUN:   -target riscv32-unknown-elf --rtlib=platform --sysroot= \
120 // RUN:   -march=rv32im -mabi=ilp32\
121 // RUN:   --gcc-toolchain=%S/Inputs/multilib_riscv_elf_sdk 2>&1 \
122 // RUN:   | FileCheck -check-prefix=C-RV32IM-BAREMETAL-MULTI-ILP32 %s
123 
124 // C-RV32IM-BAREMETAL-MULTI-ILP32: "{{.*}}/Inputs/multilib_riscv_elf_sdk/lib/gcc/riscv64-unknown-elf/8.2.0/../../..{{/|\\\\}}..{{/|\\\\}}riscv64-unknown-elf/bin{{/|\\\\}}ld"
125 // C-RV32IM-BAREMETAL-MULTI-ILP32: "-m" "elf32lriscv"
126 // C-RV32IM-BAREMETAL-MULTI-ILP32: "{{.*}}/Inputs/multilib_riscv_elf_sdk/lib/gcc/riscv64-unknown-elf/8.2.0/../../..{{/|\\\\}}..{{/|\\\\}}riscv64-unknown-elf/lib/rv32im/ilp32{{/|\\\\}}crt0.o"
127 // C-RV32IM-BAREMETAL-MULTI-ILP32: "{{.*}}/Inputs/multilib_riscv_elf_sdk/lib/gcc/riscv64-unknown-elf/8.2.0/rv32im/ilp32{{/|\\\\}}crtbegin.o"
128 // C-RV32IM-BAREMETAL-MULTI-ILP32: "-L{{.*}}/Inputs/multilib_riscv_elf_sdk/lib/gcc/riscv64-unknown-elf/8.2.0"
129 // C-RV32IM-BAREMETAL-MULTI-ILP32: "-L{{.*}}/Inputs/multilib_riscv_elf_sdk/lib/gcc/riscv64-unknown-elf/8.2.0/../../..{{/|\\\\}}..{{/|\\\\}}riscv64-unknown-elf/lib"
130 // C-RV32IM-BAREMETAL-MULTI-ILP32: "--start-group" "-lc" "-lgloss" "--end-group" "-lgcc"
131 // C-RV32IM-BAREMETAL-MULTI-ILP32: "{{.*}}/Inputs/multilib_riscv_elf_sdk/lib/gcc/riscv64-unknown-elf/8.2.0/rv32im/ilp32{{/|\\\\}}crtend.o"
132 
133 // RUN: %clang %s -### -no-canonical-prefixes -fuse-ld=ld \
134 // RUN:   -target riscv32-unknown-elf --rtlib=platform --sysroot= \
135 // RUN:   -march=rv32iac -mabi=ilp32\
136 // RUN:   --gcc-toolchain=%S/Inputs/multilib_riscv_elf_sdk 2>&1 \
137 // RUN:   | FileCheck -check-prefix=C-RV32IAC-BAREMETAL-MULTI-ILP32 %s
138 
139 // C-RV32IAC-BAREMETAL-MULTI-ILP32: "{{.*}}/Inputs/multilib_riscv_elf_sdk/lib/gcc/riscv64-unknown-elf/8.2.0/../../..{{/|\\\\}}..{{/|\\\\}}riscv64-unknown-elf/bin{{/|\\\\}}ld"
140 // C-RV32IAC-BAREMETAL-MULTI-ILP32: "-m" "elf32lriscv"
141 // C-RV32IAC-BAREMETAL-MULTI-ILP32: "{{.*}}/Inputs/multilib_riscv_elf_sdk/lib/gcc/riscv64-unknown-elf/8.2.0/../../..{{/|\\\\}}..{{/|\\\\}}riscv64-unknown-elf/lib/rv32iac/ilp32{{/|\\\\}}crt0.o"
142 // C-RV32IAC-BAREMETAL-MULTI-ILP32: "{{.*}}/Inputs/multilib_riscv_elf_sdk/lib/gcc/riscv64-unknown-elf/8.2.0/rv32iac/ilp32{{/|\\\\}}crtbegin.o"
143 // C-RV32IAC-BAREMETAL-MULTI-ILP32: "-L{{.*}}/Inputs/multilib_riscv_elf_sdk/lib/gcc/riscv64-unknown-elf/8.2.0"
144 // C-RV32IAC-BAREMETAL-MULTI-ILP32: "-L{{.*}}/Inputs/multilib_riscv_elf_sdk/lib/gcc/riscv64-unknown-elf/8.2.0/../../..{{/|\\\\}}..{{/|\\\\}}riscv64-unknown-elf/lib"
145 // C-RV32IAC-BAREMETAL-MULTI-ILP32: "--start-group" "-lc" "-lgloss" "--end-group" "-lgcc"
146 // C-RV32IAC-BAREMETAL-MULTI-ILP32: "{{.*}}/Inputs/multilib_riscv_elf_sdk/lib/gcc/riscv64-unknown-elf/8.2.0/rv32iac/ilp32{{/|\\\\}}crtend.o"
147 
148 // RUN: %clang %s -### -no-canonical-prefixes -fuse-ld=ld \
149 // RUN:   -target riscv32-unknown-elf --rtlib=platform --sysroot= \
150 // RUN:   -march=rv32imac -mabi=ilp32\
151 // RUN:   --gcc-toolchain=%S/Inputs/multilib_riscv_elf_sdk 2>&1 \
152 // RUN:   | FileCheck -check-prefix=C-RV32IMAC-BAREMETAL-MULTI-ILP32 %s
153 
154 // C-RV32IMAC-BAREMETAL-MULTI-ILP32: "{{.*}}/Inputs/multilib_riscv_elf_sdk/lib/gcc/riscv64-unknown-elf/8.2.0/../../..{{/|\\\\}}..{{/|\\\\}}riscv64-unknown-elf/bin{{/|\\\\}}ld"
155 // C-RV32IMAC-BAREMETAL-MULTI-ILP32: "-m" "elf32lriscv"
156 // C-RV32IMAC-BAREMETAL-MULTI-ILP32: "{{.*}}/Inputs/multilib_riscv_elf_sdk/lib/gcc/riscv64-unknown-elf/8.2.0/../../..{{/|\\\\}}..{{/|\\\\}}riscv64-unknown-elf/lib/rv32imac/ilp32{{/|\\\\}}crt0.o"
157 // C-RV32IMAC-BAREMETAL-MULTI-ILP32: "{{.*}}/Inputs/multilib_riscv_elf_sdk/lib/gcc/riscv64-unknown-elf/8.2.0/rv32imac/ilp32{{/|\\\\}}crtbegin.o"
158 // C-RV32IMAC-BAREMETAL-MULTI-ILP32: "-L{{.*}}/Inputs/multilib_riscv_elf_sdk/lib/gcc/riscv64-unknown-elf/8.2.0"
159 // C-RV32IMAC-BAREMETAL-MULTI-ILP32: "-L{{.*}}/Inputs/multilib_riscv_elf_sdk/lib/gcc/riscv64-unknown-elf/8.2.0/../../..{{/|\\\\}}..{{/|\\\\}}riscv64-unknown-elf/lib"
160 // C-RV32IMAC-BAREMETAL-MULTI-ILP32: "--start-group" "-lc" "-lgloss" "--end-group" "-lgcc"
161 // C-RV32IMAC-BAREMETAL-MULTI-ILP32: "{{.*}}/Inputs/multilib_riscv_elf_sdk/lib/gcc/riscv64-unknown-elf/8.2.0/rv32imac/ilp32{{/|\\\\}}crtend.o"
162 
163 // RUN: %clang %s -### -no-canonical-prefixes -fuse-ld=ld \
164 // RUN:   -target riscv32-unknown-elf --rtlib=platform --sysroot= \
165 // RUN:   -march=rv32imafc -mabi=ilp32f \
166 // RUN:   --gcc-toolchain=%S/Inputs/multilib_riscv_elf_sdk 2>&1 \
167 // RUN:   | FileCheck -check-prefix=C-RV32IMAFC-BAREMETAL-MULTI-ILP32F %s
168 
169 // C-RV32IMAFC-BAREMETAL-MULTI-ILP32F: "{{.*}}/Inputs/multilib_riscv_elf_sdk/lib/gcc/riscv64-unknown-elf/8.2.0/../../..{{/|\\\\}}..{{/|\\\\}}riscv64-unknown-elf/bin{{/|\\\\}}ld"
170 // C-RV32IMAFC-BAREMETAL-MULTI-ILP32F: "-m" "elf32lriscv"
171 // C-RV32IMAFC-BAREMETAL-MULTI-ILP32F: "{{.*}}/Inputs/multilib_riscv_elf_sdk/lib/gcc/riscv64-unknown-elf/8.2.0/../../..{{/|\\\\}}..{{/|\\\\}}riscv64-unknown-elf/lib/rv32imafc/ilp32f{{/|\\\\}}crt0.o"
172 // C-RV32IMAFC-BAREMETAL-MULTI-ILP32F: "{{.*}}/Inputs/multilib_riscv_elf_sdk/lib/gcc/riscv64-unknown-elf/8.2.0/rv32imafc/ilp32f{{/|\\\\}}crtbegin.o"
173 // C-RV32IMAFC-BAREMETAL-MULTI-ILP32F: "-L{{.*}}/Inputs/multilib_riscv_elf_sdk/lib/gcc/riscv64-unknown-elf/8.2.0"
174 // C-RV32IMAFC-BAREMETAL-MULTI-ILP32F: "-L{{.*}}/Inputs/multilib_riscv_elf_sdk/lib/gcc/riscv64-unknown-elf/8.2.0/../../..{{/|\\\\}}..{{/|\\\\}}riscv64-unknown-elf/lib"
175 // C-RV32IMAFC-BAREMETAL-MULTI-ILP32F: "--start-group" "-lc" "-lgloss" "--end-group" "-lgcc"
176 // C-RV32IMAFC-BAREMETAL-MULTI-ILP32F: "{{.*}}/Inputs/multilib_riscv_elf_sdk/lib/gcc/riscv64-unknown-elf/8.2.0/rv32imafc/ilp32f{{/|\\\\}}crtend.o"
177 
178 // Check that --rtlib can be used to override the used runtime library
179 // RUN: %clang %s -### -no-canonical-prefixes \
180 // RUN:   -target riscv32-unknown-elf --rtlib=libgcc 2>&1 \
181 // RUN:   | FileCheck -check-prefix=C-RV32-RTLIB-LIBGCC-ILP32 %s
182 // C-RV32-RTLIB-LIBGCC-ILP32: "{{.*}}crt0.o"
183 // C-RV32-RTLIB-LIBGCC-ILP32: "{{.*}}crtbegin.o"
184 // C-RV32-RTLIB-LIBGCC-ILP32: "--start-group" "-lc" "-lgloss" "--end-group" "-lgcc"
185 // C-RV32-RTLIB-LIBGCC-ILP32: "{{.*}}crtend.o"
186 
187 // RUN: %clang %s -### -no-canonical-prefixes \
188 // RUN:   -target riscv32-unknown-elf --rtlib=compiler-rt 2>&1 \
189 // RUN:   | FileCheck -check-prefix=C-RV32-RTLIB-COMPILERRT-ILP32 %s
190 // C-RV32-RTLIB-COMPILERRT-ILP32: "{{.*}}crt0.o"
191 // C-RV32-RTLIB-COMPILERRT-ILP32: "{{.*}}clang_rt.crtbegin-riscv32.o"
192 // C-RV32-RTLIB-COMPILERRT-ILP32: "--start-group" "-lc" "-lgloss" "--end-group" "{{.*}}libclang_rt.builtins-riscv32.a"
193 // C-RV32-RTLIB-COMPILERRT-ILP32: "{{.*}}clang_rt.crtend-riscv32.o"
194 
195 // RUN: %clang -target riscv32 %s -emit-llvm -S -o - | FileCheck %s
196 
197 typedef __builtin_va_list va_list;
198 typedef __SIZE_TYPE__ size_t;
199 typedef __PTRDIFF_TYPE__ ptrdiff_t;
200 typedef __WCHAR_TYPE__ wchar_t;
201 typedef __WINT_TYPE__ wint_t;
202 
203 
204 // Check Alignments
205 
206 // CHECK: @align_c = dso_local global i32 1
207 int align_c = __alignof(char);
208 
209 // CHECK: @align_s = dso_local global i32 2
210 int align_s = __alignof(short);
211 
212 // CHECK: @align_i = dso_local global i32 4
213 int align_i = __alignof(int);
214 
215 // CHECK: @align_wc = dso_local global i32 4
216 int align_wc = __alignof(wchar_t);
217 
218 // CHECK: @align_wi = dso_local global i32 4
219 int align_wi = __alignof(wint_t);
220 
221 // CHECK: @align_l = dso_local global i32 4
222 int align_l = __alignof(long);
223 
224 // CHECK: @align_ll = dso_local global i32 8
225 int align_ll = __alignof(long long);
226 
227 // CHECK: @align_p = dso_local global i32 4
228 int align_p = __alignof(void*);
229 
230 // CHECK: @align_f = dso_local global i32 4
231 int align_f = __alignof(float);
232 
233 // CHECK: @align_d = dso_local global i32 8
234 int align_d = __alignof(double);
235 
236 // CHECK: @align_ld = dso_local global i32 16
237 int align_ld = __alignof(long double);
238 
239 // CHECK: @align_vl = dso_local global i32 4
240 int align_vl = __alignof(va_list);
241 
242 // CHECK: @align_a_c = dso_local global i32 1
243 int align_a_c = __alignof(_Atomic(char));
244 
245 // CHECK: @align_a_s = dso_local global i32 2
246 int align_a_s = __alignof(_Atomic(short));
247 
248 // CHECK: @align_a_i = dso_local global i32 4
249 int align_a_i = __alignof(_Atomic(int));
250 
251 // CHECK: @align_a_wc = dso_local global i32 4
252 int align_a_wc = __alignof(_Atomic(wchar_t));
253 
254 // CHECK: @align_a_wi = dso_local global i32 4
255 int align_a_wi = __alignof(_Atomic(wint_t));
256 
257 // CHECK: @align_a_l = dso_local global i32 4
258 int align_a_l = __alignof(_Atomic(long));
259 
260 // CHECK: @align_a_ll = dso_local global i32 8
261 int align_a_ll = __alignof(_Atomic(long long));
262 
263 // CHECK: @align_a_p = dso_local global i32 4
264 int align_a_p = __alignof(_Atomic(void*));
265 
266 // CHECK: @align_a_f = dso_local global i32 4
267 int align_a_f = __alignof(_Atomic(float));
268 
269 // CHECK: @align_a_d = dso_local global i32 8
270 int align_a_d = __alignof(_Atomic(double));
271 
272 // CHECK: @align_a_ld = dso_local global i32 16
273 int align_a_ld = __alignof(_Atomic(long double));
274 
275 // CHECK: @align_a_s4 = dso_local global i32 4
276 int align_a_s4 = __alignof(_Atomic(struct { char s[4]; }));
277 
278 // CHECK: @align_a_s8 = dso_local global i32 8
279 int align_a_s8 = __alignof(_Atomic(struct { char s[8]; }));
280 
281 // CHECK: @align_a_s16 = dso_local global i32 16
282 int align_a_s16 = __alignof(_Atomic(struct { char s[16]; }));
283 
284 // CHECK: @align_a_s32 = dso_local global i32 1
285 int align_a_s32 = __alignof(_Atomic(struct { char s[32]; }));
286 
287 
288 // Check Sizes
289 
290 // CHECK: @size_a_c = dso_local global i32 1
291 int size_a_c = sizeof(_Atomic(char));
292 
293 // CHECK: @size_a_s = dso_local global i32 2
294 int size_a_s = sizeof(_Atomic(short));
295 
296 // CHECK: @size_a_i = dso_local global i32 4
297 int size_a_i = sizeof(_Atomic(int));
298 
299 // CHECK: @size_a_wc = dso_local global i32 4
300 int size_a_wc = sizeof(_Atomic(wchar_t));
301 
302 // CHECK: @size_a_wi = dso_local global i32 4
303 int size_a_wi = sizeof(_Atomic(wint_t));
304 
305 // CHECK: @size_a_l = dso_local global i32 4
306 int size_a_l = sizeof(_Atomic(long));
307 
308 // CHECK: @size_a_ll = dso_local global i32 8
309 int size_a_ll = sizeof(_Atomic(long long));
310 
311 // CHECK: @size_a_p = dso_local global i32 4
312 int size_a_p = sizeof(_Atomic(void*));
313 
314 // CHECK: @size_a_f = dso_local global i32 4
315 int size_a_f = sizeof(_Atomic(float));
316 
317 // CHECK: @size_a_d = dso_local global i32 8
318 int size_a_d = sizeof(_Atomic(double));
319 
320 // CHECK: @size_a_ld = dso_local global i32 16
321 int size_a_ld = sizeof(_Atomic(long double));
322 
323 
324 // Check types
325 
326 // CHECK: zeroext i8 @check_char()
check_char()327 char check_char() { return 0; }
328 
329 // CHECK: define dso_local signext i16 @check_short()
check_short()330 short check_short() { return 0; }
331 
332 // CHECK: define dso_local i32 @check_int()
check_int()333 int check_int() { return 0; }
334 
335 // CHECK: define dso_local i32 @check_wchar_t()
check_wchar_t()336 int check_wchar_t() { return 0; }
337 
338 // CHECK: define dso_local i32 @check_long()
check_long()339 long check_long() { return 0; }
340 
341 // CHECK: define dso_local i64 @check_longlong()
check_longlong()342 long long check_longlong() { return 0; }
343 
344 // CHECK: define dso_local zeroext i8 @check_uchar()
check_uchar()345 unsigned char check_uchar() { return 0; }
346 
347 // CHECK: define dso_local zeroext i16 @check_ushort()
check_ushort()348 unsigned short check_ushort() { return 0; }
349 
350 // CHECK: define dso_local i32 @check_uint()
check_uint()351 unsigned int check_uint() { return 0; }
352 
353 // CHECK: define dso_local i32 @check_ulong()
check_ulong()354 unsigned long check_ulong() { return 0; }
355 
356 // CHECK: define dso_local i64 @check_ulonglong()
check_ulonglong()357 unsigned long long check_ulonglong() { return 0; }
358 
359 // CHECK: define dso_local i32 @check_size_t()
check_size_t()360 size_t check_size_t() { return 0; }
361 
362 // CHECK: define dso_local float @check_float()
check_float()363 float check_float() { return 0; }
364 
365 // CHECK: define dso_local double @check_double()
check_double()366 double check_double() { return 0; }
367 
368 // CHECK: define dso_local fp128 @check_longdouble()
check_longdouble()369 long double check_longdouble() { return 0; }
370