448 lines · c
1// UNSUPPORTED: system-windows2// A basic clang -cc1 command-line, and simple environment check.3 4// RUN: %clang -### %s --target=riscv32 \5// RUN: --gcc-toolchain=%S/Inputs/basic_riscv32_tree 2>&1 \6// RUN: | FileCheck -check-prefix=CC1 %s7// CC1: "-cc1" "-triple" "riscv32"8 9// Test interaction with -fuse-ld=lld, if lld is available.10// RUN: %clang -### %s --target=riscv32 \11// RUN: --gcc-toolchain=%S/Inputs/basic_riscv32_tree -fuse-ld=lld -B%S/Inputs/lld 2>&1 \12// RUN: | FileCheck -check-prefix=LLD %s13// LLD: ld.lld14 15// In the below tests, --rtlib=platform is used so that the driver ignores16// the configure-time CLANG_DEFAULT_RTLIB option when choosing the runtime lib17 18// RUN: %clang -### %s -fuse-ld= \19// RUN: --target=riscv32-unknown-elf --rtlib=platform \20// RUN: --gcc-toolchain=%S/Inputs/basic_riscv32_tree \21// RUN: --sysroot=%S/Inputs/basic_riscv32_tree/riscv32-unknown-elf 2>&1 \22// RUN: | FileCheck -check-prefix=C-RV32-BAREMETAL-ILP32 %s23 24// C-RV32-BAREMETAL-ILP32: "{{.*}}Inputs/basic_riscv32_tree/lib/gcc/riscv32-unknown-elf/8.0.1/../../../../bin/riscv32-unknown-elf-ld"25// C-RV32-BAREMETAL-ILP32: "--sysroot={{.*}}/Inputs/basic_riscv32_tree/riscv32-unknown-elf"26// C-RV32-BAREMETAL-ILP32: "-X"27// C-RV32-BAREMETAL-ILP32: "{{.*}}/Inputs/basic_riscv32_tree/riscv32-unknown-elf/lib/crt0.o"28// C-RV32-BAREMETAL-ILP32: "{{.*}}/Inputs/basic_riscv32_tree/lib/gcc/riscv32-unknown-elf/8.0.1/crtbegin.o"29// C-RV32-BAREMETAL-ILP32: "-L{{.*}}/Inputs/basic_riscv32_tree/lib/gcc/riscv32-unknown-elf/8.0.1"30// C-RV32-BAREMETAL-ILP32: "-L{{.*}}/Inputs/basic_riscv32_tree/riscv32-unknown-elf/lib"31// C-RV32-BAREMETAL-ILP32: "--start-group" "-lgcc" "-lc" "-lgloss" "--end-group"32// C-RV32-BAREMETAL-ILP32: "{{.*}}/Inputs/basic_riscv32_tree/lib/gcc/riscv32-unknown-elf/8.0.1/crtend.o"33 34// RUN: %clang -### %s -fuse-ld= \35// RUN: --target=riscv32-unknown-elf --rtlib=platform \36// RUN: --sysroot= \37// RUN: --gcc-toolchain=%S/Inputs/basic_riscv32_tree 2>&1 \38// RUN: | FileCheck -check-prefix=C-RV32-BAREMETAL-NOSYSROOT-ILP32 %s39 40// C-RV32-BAREMETAL-NOSYSROOT-ILP32: "{{.*}}Inputs/basic_riscv32_tree/lib/gcc/riscv32-unknown-elf/8.0.1/../../../../bin/riscv32-unknown-elf-ld"41// C-RV32-BAREMETAL-NOSYSROOT-ILP32: "{{.*}}/Inputs/basic_riscv32_tree/lib/gcc/riscv32-unknown-elf/8.0.1/../../../../riscv32-unknown-elf/lib/crt0.o"42// C-RV32-BAREMETAL-NOSYSROOT-ILP32: "{{.*}}/Inputs/basic_riscv32_tree/lib/gcc/riscv32-unknown-elf/8.0.1/crtbegin.o"43// C-RV32-BAREMETAL-NOSYSROOT-ILP32: "-L{{.*}}/Inputs/basic_riscv32_tree/lib/gcc/riscv32-unknown-elf/8.0.1"44// C-RV32-BAREMETAL-NOSYSROOT-ILP32: "-L{{.*}}/Inputs/basic_riscv32_tree/lib/gcc/riscv32-unknown-elf/8.0.1/../../../../riscv32-unknown-elf/lib"45// C-RV32-BAREMETAL-NOSYSROOT-ILP32: "--start-group" "-lgcc" "-lc" "-lgloss" "--end-group"46// C-RV32-BAREMETAL-NOSYSROOT-ILP32: "{{.*}}/Inputs/basic_riscv32_tree/lib/gcc/riscv32-unknown-elf/8.0.1/crtend.o"47 48// RUN: %clangxx -### %s -fuse-ld= \49// RUN: --target=riscv32-unknown-elf -stdlib=libstdc++ --rtlib=platform \50// RUN: --gcc-toolchain=%S/Inputs/basic_riscv32_tree \51// RUN: --sysroot=%S/Inputs/basic_riscv32_tree/riscv32-unknown-elf 2>&1 \52// RUN: | FileCheck -check-prefix=CXX-RV32-BAREMETAL-ILP32 %s53 54// CXX-RV32-BAREMETAL-ILP32: "-internal-isystem" "{{.*}}Inputs/basic_riscv32_tree/riscv32-unknown-elf/include/c++/8.0.1"55// CXX-RV32-BAREMETAL-ILP32: "{{.*}}Inputs/basic_riscv32_tree/lib/gcc/riscv32-unknown-elf/8.0.1/../../../../bin/riscv32-unknown-elf-ld"56// CXX-RV32-BAREMETAL-ILP32: "--sysroot={{.*}}/Inputs/basic_riscv32_tree/riscv32-unknown-elf"57// CXX-RV32-BAREMETAL-ILP32: "{{.*}}/Inputs/basic_riscv32_tree/riscv32-unknown-elf/lib/crt0.o"58// CXX-RV32-BAREMETAL-ILP32: "{{.*}}/Inputs/basic_riscv32_tree/lib/gcc/riscv32-unknown-elf/8.0.1/crtbegin.o"59// CXX-RV32-BAREMETAL-ILP32: "-L{{.*}}/Inputs/basic_riscv32_tree/lib/gcc/riscv32-unknown-elf/8.0.1"60// CXX-RV32-BAREMETAL-ILP32: "-L{{.*}}/Inputs/basic_riscv32_tree/riscv32-unknown-elf/lib"61// CXX-RV32-BAREMETAL-ILP32: "-lstdc++" "-lm" "--start-group" "-lgcc" "-lc" "-lgloss" "--end-group"62// CXX-RV32-BAREMETAL-ILP32: "{{.*}}/Inputs/basic_riscv32_tree/lib/gcc/riscv32-unknown-elf/8.0.1/crtend.o"63 64// RUN: %clangxx -### %s -fuse-ld= \65// RUN: --target=riscv32-unknown-elf -stdlib=libstdc++ --rtlib=platform \66// RUN: --sysroot= \67// RUN: --gcc-toolchain=%S/Inputs/basic_riscv32_tree 2>&1 \68// RUN: | FileCheck -check-prefix=CXX-RV32-BAREMETAL-NOSYSROOT-ILP32 %s69 70// 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"71// CXX-RV32-BAREMETAL-NOSYSROOT-ILP32: "{{.*}}Inputs/basic_riscv32_tree/lib/gcc/riscv32-unknown-elf/8.0.1/../../../../bin/riscv32-unknown-elf-ld"72// CXX-RV32-BAREMETAL-NOSYSROOT-ILP32: "{{.*}}/Inputs/basic_riscv32_tree/lib/gcc/riscv32-unknown-elf/8.0.1/../../../../riscv32-unknown-elf/lib/crt0.o"73// CXX-RV32-BAREMETAL-NOSYSROOT-ILP32: "{{.*}}/Inputs/basic_riscv32_tree/lib/gcc/riscv32-unknown-elf/8.0.1/crtbegin.o"74// CXX-RV32-BAREMETAL-NOSYSROOT-ILP32: "-L{{.*}}/Inputs/basic_riscv32_tree/lib/gcc/riscv32-unknown-elf/8.0.1"75// CXX-RV32-BAREMETAL-NOSYSROOT-ILP32: "-L{{.*}}/Inputs/basic_riscv32_tree/lib/gcc/riscv32-unknown-elf/8.0.1/../../../../riscv32-unknown-elf/lib"76// CXX-RV32-BAREMETAL-NOSYSROOT-ILP32: "-lstdc++" "-lm" "--start-group" "-lgcc" "-lc" "-lgloss" "--end-group"77// CXX-RV32-BAREMETAL-NOSYSROOT-ILP32: "{{.*}}/Inputs/basic_riscv32_tree/lib/gcc/riscv32-unknown-elf/8.0.1/crtend.o"78 79// RUN: env "PATH=" %clang -### %s -fuse-ld=ld -no-pie \80// RUN: --target=riscv32-unknown-linux-gnu --rtlib=platform --unwindlib=platform -mabi=ilp32 \81// RUN: --gcc-toolchain=%S/Inputs/multilib_riscv_linux_sdk \82// RUN: --sysroot=%S/Inputs/multilib_riscv_linux_sdk/sysroot 2>&1 \83// RUN: | FileCheck -check-prefix=C-RV32-LINUX-MULTI-ILP32 %s84 85// 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"86// C-RV32-LINUX-MULTI-ILP32: "--sysroot={{.*}}/Inputs/multilib_riscv_linux_sdk/sysroot"87// C-RV32-LINUX-MULTI-ILP32: "-m" "elf32lriscv" "-X"88// C-RV32-LINUX-MULTI-ILP32: "-dynamic-linker" "/lib/ld-linux-riscv32-ilp32.so.1"89// C-RV32-LINUX-MULTI-ILP32: "{{.*}}/Inputs/multilib_riscv_linux_sdk/lib/gcc/riscv64-unknown-linux-gnu/7.2.0/lib32/ilp32/crtbegin.o"90// C-RV32-LINUX-MULTI-ILP32: "-L{{.*}}/Inputs/multilib_riscv_linux_sdk/lib/gcc/riscv64-unknown-linux-gnu/7.2.0/lib32/ilp32"91// C-RV32-LINUX-MULTI-ILP32: "-L{{.*}}/Inputs/multilib_riscv_linux_sdk/sysroot/lib32/ilp32"92// C-RV32-LINUX-MULTI-ILP32: "-L{{.*}}/Inputs/multilib_riscv_linux_sdk/sysroot/usr/lib32/ilp32"93 94// RUN: env "PATH=" %clang -### %s -fuse-ld=ld -no-pie \95// RUN: --target=riscv32-unknown-linux-gnu --rtlib=platform --unwindlib=platform -march=rv32imafd \96// RUN: --gcc-toolchain=%S/Inputs/multilib_riscv_linux_sdk \97// RUN: --sysroot=%S/Inputs/multilib_riscv_linux_sdk/sysroot 2>&1 \98// RUN: | FileCheck -check-prefix=C-RV32-LINUX-MULTI-ILP32D %s99 100// 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"101// C-RV32-LINUX-MULTI-ILP32D: "--sysroot={{.*}}/Inputs/multilib_riscv_linux_sdk/sysroot"102// C-RV32-LINUX-MULTI-ILP32D: "-m" "elf32lriscv"103// C-RV32-LINUX-MULTI-ILP32D: "-dynamic-linker" "/lib/ld-linux-riscv32-ilp32d.so.1"104// C-RV32-LINUX-MULTI-ILP32D: "{{.*}}/Inputs/multilib_riscv_linux_sdk/lib/gcc/riscv64-unknown-linux-gnu/7.2.0/lib32/ilp32d/crtbegin.o"105// C-RV32-LINUX-MULTI-ILP32D: "-L{{.*}}/Inputs/multilib_riscv_linux_sdk/lib/gcc/riscv64-unknown-linux-gnu/7.2.0/lib32/ilp32d"106// C-RV32-LINUX-MULTI-ILP32D: "-L{{.*}}/Inputs/multilib_riscv_linux_sdk/sysroot/lib32/ilp32d"107// C-RV32-LINUX-MULTI-ILP32D: "-L{{.*}}/Inputs/multilib_riscv_linux_sdk/sysroot/usr/lib32/ilp32d"108 109// RUN: env "PATH=" %clang -### %s -fuse-ld=ld \110// RUN: --target=riscv32-unknown-elf --rtlib=platform --unwindlib=platform --sysroot= \111// RUN: --gcc-toolchain=%S/Inputs/multilib_riscv_elf_sdk 2>&1 \112// RUN: | FileCheck -check-prefix=C-RV32I-BAREMETAL-MULTI-ILP32 %s113 114// C-RV32I-BAREMETAL-MULTI-ILP32: "{{.*}}/Inputs/multilib_riscv_elf_sdk/lib/gcc/riscv64-unknown-elf/8.2.0/../../../../riscv64-unknown-elf/bin/ld"115// C-RV32I-BAREMETAL-MULTI-ILP32: "-m" "elf32lriscv"116// 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"117// C-RV32I-BAREMETAL-MULTI-ILP32: "{{.*}}/Inputs/multilib_riscv_elf_sdk/lib/gcc/riscv64-unknown-elf/8.2.0/rv32imac/ilp32/crtbegin.o"118// C-RV32I-BAREMETAL-MULTI-ILP32: "-L{{.*}}/Inputs/multilib_riscv_elf_sdk/lib/gcc/riscv64-unknown-elf/8.2.0"119// C-RV32I-BAREMETAL-MULTI-ILP32: "-L{{.*}}/Inputs/multilib_riscv_elf_sdk/lib/gcc/riscv64-unknown-elf/8.2.0/../../../../riscv64-unknown-elf/lib"120// C-RV32I-BAREMETAL-MULTI-ILP32: "--start-group" "-lgcc" "-lc" "-lgloss" "--end-group"121// C-RV32I-BAREMETAL-MULTI-ILP32: "{{.*}}/Inputs/multilib_riscv_elf_sdk/lib/gcc/riscv64-unknown-elf/8.2.0/rv32imac/ilp32/crtend.o"122 123// RUN: env "PATH=" %clang -### %s -fuse-ld=ld \124// RUN: --target=riscv32-unknown-elf --rtlib=platform --unwindlib=platform --sysroot= \125// RUN: -march=rv32im -mabi=ilp32\126// RUN: --gcc-toolchain=%S/Inputs/multilib_riscv_elf_sdk 2>&1 \127// RUN: | FileCheck -check-prefix=C-RV32IM-BAREMETAL-MULTI-ILP32 %s128 129// C-RV32IM-BAREMETAL-MULTI-ILP32: "{{.*}}/Inputs/multilib_riscv_elf_sdk/lib/gcc/riscv64-unknown-elf/8.2.0/../../../../riscv64-unknown-elf/bin/ld"130// C-RV32IM-BAREMETAL-MULTI-ILP32: "-m" "elf32lriscv"131// 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"132// C-RV32IM-BAREMETAL-MULTI-ILP32: "{{.*}}/Inputs/multilib_riscv_elf_sdk/lib/gcc/riscv64-unknown-elf/8.2.0/rv32im/ilp32/crtbegin.o"133// C-RV32IM-BAREMETAL-MULTI-ILP32: "-L{{.*}}/Inputs/multilib_riscv_elf_sdk/lib/gcc/riscv64-unknown-elf/8.2.0"134// C-RV32IM-BAREMETAL-MULTI-ILP32: "-L{{.*}}/Inputs/multilib_riscv_elf_sdk/lib/gcc/riscv64-unknown-elf/8.2.0/../../../../riscv64-unknown-elf/lib"135// C-RV32IM-BAREMETAL-MULTI-ILP32: "--start-group" "-lgcc" "-lc" "-lgloss" "--end-group"136// C-RV32IM-BAREMETAL-MULTI-ILP32: "{{.*}}/Inputs/multilib_riscv_elf_sdk/lib/gcc/riscv64-unknown-elf/8.2.0/rv32im/ilp32/crtend.o"137 138// RUN: env "PATH=" %clang -### %s -fuse-ld=ld \139// RUN: --target=riscv32-unknown-elf --rtlib=platform --unwindlib=platform --sysroot= \140// RUN: -march=rv32iac -mabi=ilp32\141// RUN: --gcc-toolchain=%S/Inputs/multilib_riscv_elf_sdk 2>&1 \142// RUN: | FileCheck -check-prefix=C-RV32IAC-BAREMETAL-MULTI-ILP32 %s143 144// C-RV32IAC-BAREMETAL-MULTI-ILP32: "{{.*}}/Inputs/multilib_riscv_elf_sdk/lib/gcc/riscv64-unknown-elf/8.2.0/../../../../riscv64-unknown-elf/bin/ld"145// C-RV32IAC-BAREMETAL-MULTI-ILP32: "-m" "elf32lriscv"146// 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"147// C-RV32IAC-BAREMETAL-MULTI-ILP32: "{{.*}}/Inputs/multilib_riscv_elf_sdk/lib/gcc/riscv64-unknown-elf/8.2.0/rv32iac/ilp32/crtbegin.o"148// C-RV32IAC-BAREMETAL-MULTI-ILP32: "-L{{.*}}/Inputs/multilib_riscv_elf_sdk/lib/gcc/riscv64-unknown-elf/8.2.0"149// C-RV32IAC-BAREMETAL-MULTI-ILP32: "-L{{.*}}/Inputs/multilib_riscv_elf_sdk/lib/gcc/riscv64-unknown-elf/8.2.0/../../../../riscv64-unknown-elf/lib"150// C-RV32IAC-BAREMETAL-MULTI-ILP32: "--start-group" "-lgcc" "-lc" "-lgloss" "--end-group"151// C-RV32IAC-BAREMETAL-MULTI-ILP32: "{{.*}}/Inputs/multilib_riscv_elf_sdk/lib/gcc/riscv64-unknown-elf/8.2.0/rv32iac/ilp32/crtend.o"152 153// RUN: env "PATH=" %clang -### %s -fuse-ld=ld \154// RUN: --target=riscv32-unknown-elf --rtlib=platform --unwindlib=platform --sysroot= \155// RUN: -march=rv32imac -mabi=ilp32\156// RUN: --gcc-toolchain=%S/Inputs/multilib_riscv_elf_sdk 2>&1 \157// RUN: | FileCheck -check-prefix=C-RV32IMAC-BAREMETAL-MULTI-ILP32 %s158 159// C-RV32IMAC-BAREMETAL-MULTI-ILP32: "{{.*}}/Inputs/multilib_riscv_elf_sdk/lib/gcc/riscv64-unknown-elf/8.2.0/../../../../riscv64-unknown-elf/bin/ld"160// C-RV32IMAC-BAREMETAL-MULTI-ILP32: "-m" "elf32lriscv"161// 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"162// C-RV32IMAC-BAREMETAL-MULTI-ILP32: "{{.*}}/Inputs/multilib_riscv_elf_sdk/lib/gcc/riscv64-unknown-elf/8.2.0/rv32imac/ilp32/crtbegin.o"163// C-RV32IMAC-BAREMETAL-MULTI-ILP32: "-L{{.*}}/Inputs/multilib_riscv_elf_sdk/lib/gcc/riscv64-unknown-elf/8.2.0"164// C-RV32IMAC-BAREMETAL-MULTI-ILP32: "-L{{.*}}/Inputs/multilib_riscv_elf_sdk/lib/gcc/riscv64-unknown-elf/8.2.0/../../../../riscv64-unknown-elf/lib"165// C-RV32IMAC-BAREMETAL-MULTI-ILP32: "--start-group" "-lgcc" "-lc" "-lgloss" "--end-group"166// C-RV32IMAC-BAREMETAL-MULTI-ILP32: "{{.*}}/Inputs/multilib_riscv_elf_sdk/lib/gcc/riscv64-unknown-elf/8.2.0/rv32imac/ilp32/crtend.o"167 168// RUN: env "PATH=" %clang -### %s -fuse-ld=ld \169// RUN: --target=riscv32-unknown-elf --rtlib=platform --unwindlib=platform --sysroot= \170// RUN: -march=rv32imafc -mabi=ilp32f \171// RUN: --gcc-toolchain=%S/Inputs/multilib_riscv_elf_sdk 2>&1 \172// RUN: | FileCheck -check-prefix=C-RV32IMAFC-BAREMETAL-MULTI-ILP32F %s173 174// C-RV32IMAFC-BAREMETAL-MULTI-ILP32F: "{{.*}}/Inputs/multilib_riscv_elf_sdk/lib/gcc/riscv64-unknown-elf/8.2.0/../../../../riscv64-unknown-elf/bin/ld"175// C-RV32IMAFC-BAREMETAL-MULTI-ILP32F: "-m" "elf32lriscv"176// 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"177// C-RV32IMAFC-BAREMETAL-MULTI-ILP32F: "{{.*}}/Inputs/multilib_riscv_elf_sdk/lib/gcc/riscv64-unknown-elf/8.2.0/rv32imafc/ilp32f/crtbegin.o"178// C-RV32IMAFC-BAREMETAL-MULTI-ILP32F: "-L{{.*}}/Inputs/multilib_riscv_elf_sdk/lib/gcc/riscv64-unknown-elf/8.2.0"179// C-RV32IMAFC-BAREMETAL-MULTI-ILP32F: "-L{{.*}}/Inputs/multilib_riscv_elf_sdk/lib/gcc/riscv64-unknown-elf/8.2.0/../../../../riscv64-unknown-elf/lib"180// C-RV32IMAFC-BAREMETAL-MULTI-ILP32F: "--start-group" "-lgcc" "-lc" "-lgloss" "--end-group"181// C-RV32IMAFC-BAREMETAL-MULTI-ILP32F: "{{.*}}/Inputs/multilib_riscv_elf_sdk/lib/gcc/riscv64-unknown-elf/8.2.0/rv32imafc/ilp32f/crtend.o"182 183// Check that --rtlib can be used to override the used runtime library184// RUN: %clang -### %s \185// RUN: --gcc-toolchain=%S/Inputs/multilib_riscv_elf_sdk \186// RUN: --target=riscv32-unknown-elf --rtlib=libgcc --unwindlib=libgcc 2>&1 \187// RUN: | FileCheck -check-prefix=C-RV32-RTLIB-LIBGCC-ILP32 %s188// C-RV32-RTLIB-LIBGCC-ILP32: "{{.*}}crt0.o"189// C-RV32-RTLIB-LIBGCC-ILP32: "{{.*}}crtbegin.o"190// C-RV32-RTLIB-LIBGCC-ILP32: "--start-group" "-lgcc" "-lc" "-lgloss" "--end-group"191// C-RV32-RTLIB-LIBGCC-ILP32: "{{.*}}crtend.o"192 193// RUN: %clang -### %s \194// RUN: --gcc-toolchain=%S/Inputs/multilib_riscv_elf_sdk \195// RUN: --target=riscv32-unknown-elf --rtlib=compiler-rt --unwindlib=compiler-rt 2>&1 \196// RUN: | FileCheck -check-prefix=C-RV32-RTLIB-COMPILERRT-ILP32 %s197// C-RV32-RTLIB-COMPILERRT-ILP32: "{{.*}}crt0.o"198// C-RV32-RTLIB-COMPILERRT-ILP32: "{{.*}}clang_rt.crtbegin.o"199// C-RV32-RTLIB-COMPILERRT-ILP32: "--start-group" "{{.*}}libclang_rt.builtins.a" "-lc" "-lgloss" "--end-group"200// C-RV32-RTLIB-COMPILERRT-ILP32: "{{.*}}clang_rt.crtend.o"201 202// RUN: %clang -### %s --target=riscv32 \203// RUN: --gcc-toolchain=%S/Inputs/basic_riscv32_tree --sysroot= \204// RUN: -resource-dir=%s/Inputs/resource_dir 2>&1 \205// RUN: | FileCheck -check-prefix=RESOURCE-INC %s206// RESOURCE-INC: "-internal-isystem" "{{.*}}/Inputs/resource_dir/include"207// RESOURCE-INC: "-internal-isystem" "{{.*}}/basic_riscv32_tree{{.*}}riscv32-unknown-linux-gnu/include"208 209// RUN: %clang -### %s --target=riscv32 \210// RUN: --gcc-toolchain=%S/Inputs/basic_riscv32_tree --sysroot= \211// RUN: -resource-dir=%s/Inputs/resource_dir -nobuiltininc 2>&1 \212// RUN: | FileCheck -check-prefix=NO-RESOURCE-INC %s213// NO-RESOURCE-INC-NOT: "-internal-isystem" "{{.*}}/Inputs/resource_dir/include"214// NO-RESOURCE-INC: "-internal-isystem" "{{.*}}/basic_riscv32_tree/{{.*}}riscv32-unknown-linux-gnu/include"215 216// RUN: %clang --target=riscv32 %s -emit-llvm -S -o - | FileCheck %s217 218/// Check that "--no-relax" is forwarded to the linker for RISC-V.219// RUN: env "PATH=" %clang %s -### 2>&1 -mno-relax \220// RUN: --target=riscv32-unknown-elf --rtlib=platform --unwindlib=platform --sysroot= \221// RUN: -march=rv32imac -mabi=lp32\222// RUN: --gcc-toolchain=%S/Inputs/multilib_riscv_elf_sdk 2>&1 \223// RUN: | FileCheck --check-prefix=CHECK-RV32-NORELAX %s224// CHECK-RV32-NORELAX: "--no-relax"225 226/// Check that "--no-relax" is not forwarded to the linker for RISC-V.227// RUN:env "PATH=" %clang %s -### 2>&1 \228// RUN: --target=riscv32-unknown-elf --rtlib=platform --unwindlib=platform --sysroot= \229// RUN: -march=rv32imac -mabi=lp32\230// RUN: --gcc-toolchain=%S/Inputs/multilib_riscv_elf_sdk 2>&1 \231// RUN: | FileCheck --check-prefix=CHECK-RV32-RELAX %s232// CHECK-RV32-RELAX-NOT: "--no-relax"233 234/// Check that "--no-relax" is forwarded to the linker for RISC-V (Gnu.cpp).235// RUN: env "PATH=" %clang -### %s -fuse-ld=ld -no-pie -mno-relax \236// RUN: --target=riscv32-unknown-linux-gnu --rtlib=platform --unwindlib=platform -mabi=ilp32 \237// RUN: --gcc-toolchain=%S/Inputs/multilib_riscv_linux_sdk \238// RUN: --sysroot=%S/Inputs/multilib_riscv_linux_sdk/sysroot 2>&1 \239// RUN: | FileCheck -check-prefix=CHECK-RV32-GNU-NORELAX %s240// CHECK-RV32-GNU-NORELAX: "--no-relax"241 242/// Check that "--no-relax" is not forwarded to the linker for RISC-V (Gnu.cpp).243// RUN: env "PATH=" %clang -### %s -fuse-ld=ld -no-pie \244// RUN: --target=riscv32-unknown-linux-gnu --rtlib=platform --unwindlib=platform -mabi=ilp32 \245// RUN: --gcc-toolchain=%S/Inputs/multilib_riscv_linux_sdk \246// RUN: --sysroot=%S/Inputs/multilib_riscv_linux_sdk/sysroot 2>&1 \247// RUN: | FileCheck -check-prefix=CHECK-RV32-GNU-RELAX %s248// CHECK-RV32-GNU-RELAX-NOT: "--no-relax"249 250/// Check that "-static -pie" is forwarded to linker when "-static-pie" is used251// RUN: %clang -static-pie -### %s -fuse-ld= \252// RUN: --target=riscv32-unknown-elf -rtlib=platform --unwindlib=platform \253// RUN: --gcc-toolchain=%S/Inputs/basic_riscv32_tree \254// RUN: --sysroot=%S/Inputs/basic_riscv32_tree/riscv32-unknown-elf 2>&1 \255// RUN: | FileCheck -check-prefix=C-RV32-STATIC-PIE %s256 257// C-RV32-STATIC-PIE: "-Bstatic" "-pie" "--no-dynamic-linker" "-z" "text" "-m" "elf32lriscv" "-X"258// C-RV32-STATIC-PIE: "{{.*}}rcrt1.o"259// C-RV32-STATIC-PIE: "{{.*}}crtbeginS.o"260// C-RV32-STATIC-PIE: "--start-group" "-lgcc" "-lc" "-lgloss" "--end-group"261// C-RV32-STATIC-PIE: "{{.*}}crtendS.o"262 263typedef __builtin_va_list va_list;264typedef __SIZE_TYPE__ size_t;265typedef __PTRDIFF_TYPE__ ptrdiff_t;266typedef __WCHAR_TYPE__ wchar_t;267typedef __WINT_TYPE__ wint_t;268 269 270// Check Alignments271 272// CHECK: @align_c = dso_local global i32 1273int align_c = __alignof(char);274 275// CHECK: @align_s = dso_local global i32 2276int align_s = __alignof(short);277 278// CHECK: @align_i = dso_local global i32 4279int align_i = __alignof(int);280 281// CHECK: @align_wc = dso_local global i32 4282int align_wc = __alignof(wchar_t);283 284// CHECK: @align_wi = dso_local global i32 4285int align_wi = __alignof(wint_t);286 287// CHECK: @align_l = dso_local global i32 4288int align_l = __alignof(long);289 290// CHECK: @align_ll = dso_local global i32 8291int align_ll = __alignof(long long);292 293// CHECK: @align_p = dso_local global i32 4294int align_p = __alignof(void*);295 296// CHECK: @align_f16 = dso_local global i32 2297int align_f16 = __alignof(_Float16);298 299// CHECK: @align_f = dso_local global i32 4300int align_f = __alignof(float);301 302// CHECK: @align_d = dso_local global i32 8303int align_d = __alignof(double);304 305// CHECK: @align_ld = dso_local global i32 16306int align_ld = __alignof(long double);307 308// CHECK: @align_vl = dso_local global i32 4309int align_vl = __alignof(va_list);310 311// CHECK: @align_a_c = dso_local global i32 1312int align_a_c = __alignof(_Atomic(char));313 314// CHECK: @align_a_s = dso_local global i32 2315int align_a_s = __alignof(_Atomic(short));316 317// CHECK: @align_a_i = dso_local global i32 4318int align_a_i = __alignof(_Atomic(int));319 320// CHECK: @align_a_wc = dso_local global i32 4321int align_a_wc = __alignof(_Atomic(wchar_t));322 323// CHECK: @align_a_wi = dso_local global i32 4324int align_a_wi = __alignof(_Atomic(wint_t));325 326// CHECK: @align_a_l = dso_local global i32 4327int align_a_l = __alignof(_Atomic(long));328 329// CHECK: @align_a_ll = dso_local global i32 8330int align_a_ll = __alignof(_Atomic(long long));331 332// CHECK: @align_a_p = dso_local global i32 4333int align_a_p = __alignof(_Atomic(void*));334 335// CHECK: @align_a_f16 = dso_local global i32 2336int align_a_f16 = __alignof(_Atomic(_Float16));337 338// CHECK: @align_a_f = dso_local global i32 4339int align_a_f = __alignof(_Atomic(float));340 341// CHECK: @align_a_d = dso_local global i32 8342int align_a_d = __alignof(_Atomic(double));343 344// CHECK: @align_a_ld = dso_local global i32 16345int align_a_ld = __alignof(_Atomic(long double));346 347// CHECK: @align_a_s4 = dso_local global i32 4348int align_a_s4 = __alignof(_Atomic(struct { char s[4]; }));349 350// CHECK: @align_a_s8 = dso_local global i32 8351int align_a_s8 = __alignof(_Atomic(struct { char s[8]; }));352 353// CHECK: @align_a_s16 = dso_local global i32 16354int align_a_s16 = __alignof(_Atomic(struct { char s[16]; }));355 356// CHECK: @align_a_s32 = dso_local global i32 1357int align_a_s32 = __alignof(_Atomic(struct { char s[32]; }));358 359 360// Check Sizes361 362// CHECK: @size_a_c = dso_local global i32 1363int size_a_c = sizeof(_Atomic(char));364 365// CHECK: @size_a_s = dso_local global i32 2366int size_a_s = sizeof(_Atomic(short));367 368// CHECK: @size_a_i = dso_local global i32 4369int size_a_i = sizeof(_Atomic(int));370 371// CHECK: @size_a_wc = dso_local global i32 4372int size_a_wc = sizeof(_Atomic(wchar_t));373 374// CHECK: @size_a_wi = dso_local global i32 4375int size_a_wi = sizeof(_Atomic(wint_t));376 377// CHECK: @size_a_l = dso_local global i32 4378int size_a_l = sizeof(_Atomic(long));379 380// CHECK: @size_a_ll = dso_local global i32 8381int size_a_ll = sizeof(_Atomic(long long));382 383// CHECK: @size_a_p = dso_local global i32 4384int size_a_p = sizeof(_Atomic(void*));385 386// CHECK: @size_a_f16 = dso_local global i32 2387int size_a_f16 = sizeof(_Atomic(_Float16));388 389// CHECK: @size_a_f = dso_local global i32 4390int size_a_f = sizeof(_Atomic(float));391 392// CHECK: @size_a_d = dso_local global i32 8393int size_a_d = sizeof(_Atomic(double));394 395// CHECK: @size_a_ld = dso_local global i32 16396int size_a_ld = sizeof(_Atomic(long double));397 398 399// Check types400 401// CHECK: zeroext i8 @check_char()402char check_char(void) { return 0; }403 404// CHECK: define dso_local signext i16 @check_short()405short check_short(void) { return 0; }406 407// CHECK: define dso_local i32 @check_int()408int check_int(void) { return 0; }409 410// CHECK: define dso_local i32 @check_wchar_t()411int check_wchar_t(void) { return 0; }412 413// CHECK: define dso_local i32 @check_long()414long check_long(void) { return 0; }415 416// CHECK: define dso_local i64 @check_longlong()417long long check_longlong(void) { return 0; }418 419// CHECK: define dso_local zeroext i8 @check_uchar()420unsigned char check_uchar(void) { return 0; }421 422// CHECK: define dso_local zeroext i16 @check_ushort()423unsigned short check_ushort(void) { return 0; }424 425// CHECK: define dso_local i32 @check_uint()426unsigned int check_uint(void) { return 0; }427 428// CHECK: define dso_local i32 @check_ulong()429unsigned long check_ulong(void) { return 0; }430 431// CHECK: define dso_local i64 @check_ulonglong()432unsigned long long check_ulonglong(void) { return 0; }433 434// CHECK: define dso_local i32 @check_size_t()435size_t check_size_t(void) { return 0; }436 437// CHECK: define dso_local half @check_float16()438_Float16 check_float16(void) { return 0; }439 440// CHECK: define dso_local float @check_float()441float check_float(void) { return 0; }442 443// CHECK: define dso_local double @check_double()444double check_double(void) { return 0; }445 446// CHECK: define dso_local fp128 @check_longdouble()447long double check_longdouble(void) { return 0; }448