1 // RUN: %clangxx %s -### -no-canonical-prefixes --target=x86_64-unknown-fuchsia \
2 // RUN:     -ccc-install-dir %S/Inputs/basic_fuchsia_tree/bin \
3 // RUN:     -resource-dir=%S/Inputs/resource_dir_with_per_target_subdir \
4 // RUN:     --sysroot=%S/platform -fuse-ld=lld 2>&1 \
5 // RUN:     | FileCheck -check-prefixes=CHECK,CHECK-X86_64 %s
6 // RUN: %clangxx %s -### -no-canonical-prefixes --target=aarch64-unknown-fuchsia \
7 // RUN:     -ccc-install-dir %S/Inputs/basic_fuchsia_tree/bin \
8 // RUN:     -resource-dir=%S/Inputs/resource_dir_with_per_target_subdir \
9 // RUN:     --sysroot=%S/platform -fuse-ld=lld 2>&1 \
10 // RUN:     | FileCheck -check-prefixes=CHECK,CHECK-AARCH64 %s
11 // RUN: %clangxx %s -### -no-canonical-prefixes --target=riscv64-unknown-fuchsia \
12 // RUN:     -ccc-install-dir %S/Inputs/basic_fuchsia_tree/bin \
13 // RUN:     -resource-dir=%S/Inputs/resource_dir_with_per_target_subdir \
14 // RUN:     --sysroot=%S/platform -fuse-ld=lld 2>&1 \
15 // RUN:     | FileCheck -check-prefixes=CHECK,CHECK-RISCV64 %s
16 // CHECK: {{.*}}clang{{.*}}" "-cc1"
17 // CHECK-X86_64: "-triple" "x86_64-unknown-fuchsia"
18 // CHECK-AARCH64: "-triple" "aarch64-unknown-fuchsia"
19 // CHECK-RISCV64: "-triple" "riscv64-unknown-fuchsia"
20 // CHECK-NOT: "-fno-use-init-array"
21 // CHECK: "-resource-dir" "[[RESOURCE_DIR:[^"]+]]"
22 // CHECK: "-isysroot" "[[SYSROOT:[^"]+]]"
23 // CHECK-X86_64: "-internal-isystem" "{{.*[/\\]}}include{{/|\\\\}}x86_64-unknown-fuchsia{{/|\\\\}}c++{{/|\\\\}}v1"
24 // CHECK-AARCH64: "-internal-isystem" "{{.*[/\\]}}include{{/|\\\\}}aarch64-unknown-fuchsia{{/|\\\\}}c++{{/|\\\\}}v1"
25 // CHECK-RISCV64: "-internal-isystem" "{{.*[/\\]}}include{{/|\\\\}}riscv64-unknown-fuchsia{{/|\\\\}}c++{{/|\\\\}}v1"
26 // CHECK: "-internal-isystem" "{{.*[/\\]}}include{{/|\\\\}}c++{{/|\\\\}}v1"
27 // CHECK: "-internal-externc-isystem" "[[SYSROOT]]{{/|\\\\}}include"
28 // CHECK: {{.*}}ld.lld{{.*}}" "-z" "now" "-z" "rodynamic" "-z" "separate-loadable-segments"
29 // CHECK: "--sysroot=[[SYSROOT]]"
30 // CHECK: "-pie"
31 // CHECK: "--build-id"
32 // CHECK: "-dynamic-linker" "ld.so.1"
33 // CHECK: Scrt1.o
34 // CHECK-NOT: crti.o
35 // CHECK-NOT: crtbegin.o
36 // CHECK: "-L[[SYSROOT]]{{/|\\\\}}lib"
37 // CHECK: "--push-state"
38 // CHECK: "--as-needed"
39 // CHECK: "-lc++"
40 // CHECK: "-lm"
41 // CHECK: "--pop-state"
42 // CHECK-X86_64: "[[RESOURCE_DIR]]{{/|\\\\}}lib{{/|\\\\}}x86_64-unknown-fuchsia{{/|\\\\}}libclang_rt.builtins.a"
43 // CHECK-AARCH64: "[[RESOURCE_DIR]]{{/|\\\\}}lib{{/|\\\\}}aarch64-unknown-fuchsia{{/|\\\\}}libclang_rt.builtins.a"
44 // CHECK-RISCV64: "[[RESOURCE_DIR]]{{/|\\\\}}lib{{/|\\\\}}riscv64-unknown-fuchsia{{/|\\\\}}libclang_rt.builtins.a"
45 // CHECK: "-lc"
46 // CHECK-NOT: crtend.o
47 // CHECK-NOT: crtn.o
48 
49 // RUN: %clangxx %s -### --target=x86_64-unknown-fuchsia -stdlib=libstdc++ \
50 // RUN:     -fuse-ld=lld 2>&1 \
51 // RUN:     | FileCheck %s -check-prefix=CHECK-STDLIB
52 // CHECK-STDLIB: error: invalid library name in argument '-stdlib=libstdc++'
53 
54 // RUN: %clangxx %s -### --target=x86_64-unknown-fuchsia -static-libstdc++ \
55 // RUN:     -fuse-ld=lld 2>&1 \
56 // RUN:     | FileCheck %s -check-prefix=CHECK-STATIC
57 // CHECK-STATIC: "--push-state"
58 // CHECK-STATIC: "--as-needed"
59 // CHECK-STATIC: "-Bstatic"
60 // CHECK-STATIC: "-lc++"
61 // CHECK-STATIC: "-Bdynamic"
62 // CHECK-STATIC: "-lm"
63 // CHECK-STATIC: "--pop-state"
64 // CHECK-STATIC: "-lc"
65 
66 // RUN: %clangxx %s -### --target=x86_64-unknown-fuchsia -nostdlib++ -fuse-ld=lld 2>&1 \
67 // RUN:     | FileCheck %s -check-prefix=CHECK-NOSTDLIBXX
68 // CHECK-NOSTDLIBXX-NOT: "-lc++"
69 // CHECK-NOSTDLIBXX-NOT: "-lm"
70 // CHECK-NOSTDLIBXX: "-lc"
71 
72 // RUN: %clangxx %s -### --target=x86_64-unknown-fuchsia \
73 // RUN:     -ccc-install-dir %S/Inputs/basic_fuchsia_tree/bin \
74 // RUN:     -resource-dir=%S/Inputs/resource_dir_with_per_target_subdir \
75 // RUN:     -fuse-ld=lld 2>&1\
76 // RUN:     | FileCheck %s -check-prefixes=CHECK-MULTILIB-X86
77 // RUN: %clangxx %s -### --target=x86_64-unknown-fuchsia -fsanitize=address \
78 // RUN:     -ccc-install-dir %S/Inputs/basic_fuchsia_tree/bin \
79 // RUN:     -resource-dir=%S/Inputs/resource_dir_with_per_target_subdir \
80 // RUN:     -fuse-ld=lld 2>&1\
81 // RUN:     | FileCheck %s -check-prefixes=CHECK-MULTILIB-X86,CHECK-MULTILIB-ASAN-X86
82 // RUN: %clangxx %s -### --target=x86_64-unknown-fuchsia -fno-exceptions \
83 // RUN:     -ccc-install-dir %S/Inputs/basic_fuchsia_tree/bin \
84 // RUN:     -resource-dir=%S/Inputs/resource_dir_with_per_target_subdir \
85 // RUN:     -fuse-ld=lld 2>&1\
86 // RUN:     | FileCheck %s -check-prefixes=CHECK-MULTILIB-X86,CHECK-MULTILIB-NOEXCEPT-X86
87 // RUN: %clangxx %s -### --target=x86_64-unknown-fuchsia -fsanitize=address -fno-exceptions \
88 // RUN:     -ccc-install-dir %S/Inputs/basic_fuchsia_tree/bin \
89 // RUN:     -resource-dir=%S/Inputs/resource_dir_with_per_target_subdir \
90 // RUN:     -fuse-ld=lld 2>&1\
91 // RUN:     | FileCheck %s -check-prefixes=CHECK-MULTILIB-X86,CHECK-MULTILIB-ASAN-NOEXCEPT-X86
92 // RUN: %clangxx %s -### --target=x86_64-unknown-fuchsia -fexperimental-relative-c++-abi-vtables \
93 // RUN:     -ccc-install-dir %S/Inputs/basic_fuchsia_tree/bin \
94 // RUN:     -resource-dir=%S/Inputs/resource_dir_with_per_target_subdir \
95 // RUN:     -fuse-ld=lld 2>&1\
96 // RUN:     | FileCheck %s -check-prefixes=CHECK-MULTILIB-X86,CHECK-MULTILIB-RELATIVE-VTABLES-X86
97 // RUN: %clangxx %s -### --target=x86_64-unknown-fuchsia -fexperimental-relative-c++-abi-vtables -fno-exceptions \
98 // RUN:     -ccc-install-dir %S/Inputs/basic_fuchsia_tree/bin \
99 // RUN:     -resource-dir=%S/Inputs/resource_dir_with_per_target_subdir \
100 // RUN:     -fuse-ld=lld 2>&1\
101 // RUN:     | FileCheck %s -check-prefixes=CHECK-MULTILIB-X86,CHECK-MULTILIB-RELATIVE-VTABLES-NOEXCEPT-X86
102 // RUN: %clangxx %s -### --target=x86_64-unknown-fuchsia -fexperimental-relative-c++-abi-vtables -fsanitize=address \
103 // RUN:     -ccc-install-dir %S/Inputs/basic_fuchsia_tree/bin \
104 // RUN:     -resource-dir=%S/Inputs/resource_dir_with_per_target_subdir \
105 // RUN:     -fuse-ld=lld 2>&1\
106 // RUN:     | FileCheck %s -check-prefixes=CHECK-MULTILIB-X86,CHECK-MULTILIB-RELATIVE-VTABLES-ASAN-X86
107 // RUN: %clangxx %s -### --target=x86_64-unknown-fuchsia -fexperimental-relative-c++-abi-vtables -fno-exceptions -fsanitize=address \
108 // RUN:     -ccc-install-dir %S/Inputs/basic_fuchsia_tree/bin \
109 // RUN:     -resource-dir=%S/Inputs/resource_dir_with_per_target_subdir \
110 // RUN:     -fuse-ld=lld 2>&1\
111 // RUN:     | FileCheck %s -check-prefixes=CHECK-MULTILIB-X86,CHECK-MULTILIB-RELATIVE-VTABLES-ASAN-NOEXCEPT-X86
112 // RUN: %clangxx %s -### --target=x86_64-unknown-fuchsia -fno-experimental-relative-c++-abi-vtables \
113 // RUN:     -ccc-install-dir %S/Inputs/basic_fuchsia_tree/bin \
114 // RUN:     -resource-dir=%S/Inputs/resource_dir_with_per_target_subdir \
115 // RUN:     -fuse-ld=lld 2>&1\
116 // RUN:     | FileCheck %s -check-prefixes=CHECK-MULTILIB-X86
117 // RUN: %clangxx %s -### --target=x86_64-unknown-fuchsia -fno-experimental-relative-c++-abi-vtables \
118 // RUN:     -ccc-install-dir %S/Inputs/basic_fuchsia_tree/bin \
119 // RUN:     -resource-dir=%S/Inputs/resource_dir_with_per_target_subdir \
120 // RUN:     -fuse-ld=lld 2>&1\
121 // RUN:     | FileCheck %s -check-prefixes=CHECK-MULTILIB-X86
122 // RUN: %clangxx %s -### --target=x86_64-unknown-fuchsia -fno-experimental-relative-c++-abi-vtables -fexperimental-relative-c++-abi-vtables \
123 // RUN:     -ccc-install-dir %S/Inputs/basic_fuchsia_tree/bin \
124 // RUN:     -resource-dir=%S/Inputs/resource_dir_with_per_target_subdir \
125 // RUN:     -fuse-ld=lld 2>&1\
126 // RUN:     | FileCheck %s -check-prefixes=CHECK-MULTILIB-X86
127 // RUN: %clangxx %s -### --target=x86_64-unknown-fuchsia -fsanitize=hwaddress \
128 // RUN:     -ccc-install-dir %S/Inputs/basic_fuchsia_tree/bin \
129 // RUN:     -resource-dir=%S/Inputs/resource_dir_with_per_target_subdir \
130 // RUN:     -fuse-ld=lld 2>&1\
131 // RUN:     | FileCheck %s -check-prefixes=CHECK-MULTILIB-X86,CHECK-MULTILIB-HWASAN-X86
132 // RUN: %clangxx %s -### --target=x86_64-unknown-fuchsia -fsanitize=hwaddress -fno-exceptions \
133 // RUN:     -ccc-install-dir %S/Inputs/basic_fuchsia_tree/bin \
134 // RUN:     -resource-dir=%S/Inputs/resource_dir_with_per_target_subdir \
135 // RUN:     -fuse-ld=lld 2>&1\
136 // RUN:     | FileCheck %s -check-prefixes=CHECK-MULTILIB-X86,CHECK-MULTILIB-HWASAN-NOEXCEPT-X86
137 // RUN: %clangxx %s -### --target=x86_64-unknown-fuchsia -fexperimental-relative-c++-abi-vtables -fsanitize=hwaddress \
138 // RUN:     -ccc-install-dir %S/Inputs/basic_fuchsia_tree/bin \
139 // RUN:     -resource-dir=%S/Inputs/resource_dir_with_per_target_subdir \
140 // RUN:     -fuse-ld=lld 2>&1\
141 // RUN:     | FileCheck %s -check-prefixes=CHECK-MULTILIB-X86,CHECK-MULTILIB-RELATIVE-VTABLES-HWASAN-X86
142 // RUN: %clangxx %s -### --target=x86_64-unknown-fuchsia -fexperimental-relative-c++-abi-vtables -fno-exceptions -fsanitize=hwaddress \
143 // RUN:     -ccc-install-dir %S/Inputs/basic_fuchsia_tree/bin \
144 // RUN:     -resource-dir=%S/Inputs/resource_dir_with_per_target_subdir \
145 // RUN:     -fuse-ld=lld 2>&1\
146 // RUN:     | FileCheck %s -check-prefixes=CHECK-MULTILIB-X86,CHECK-MULTILIB-RELATIVE-VTABLES-HWASAN-NOEXCEPT-X86
147 
148 // Test compat multilibs.
149 // RUN: %clangxx %s -### --target=x86_64-unknown-fuchsia -fc++-abi=itanium \
150 // RUN:     -ccc-install-dir %S/Inputs/basic_fuchsia_tree/bin \
151 // RUN:     -resource-dir=%S/Inputs/resource_dir_with_per_target_subdir \
152 // RUN:     -fuse-ld=lld 2>&1\
153 // RUN:     | FileCheck %s -check-prefixes=CHECK-MULTILIB-X86,CHECK-MULTILIB-COMPAT-X86
154 // RUN: %clangxx %s -### --target=x86_64-unknown-fuchsia -fc++-abi=itanium -fc++-abi=fuchsia \
155 // RUN:     -ccc-install-dir %S/Inputs/basic_fuchsia_tree/bin \
156 // RUN:     -resource-dir=%S/Inputs/resource_dir_with_per_target_subdir \
157 // RUN:     -fuse-ld=lld 2>&1\
158 // RUN:     | FileCheck %s -check-prefixes=CHECK-MULTILIB-X86
159 // RUN: %clangxx %s -### --target=x86_64-unknown-fuchsia -fc++-abi=fuchsia -fc++-abi=itanium \
160 // RUN:     -ccc-install-dir %S/Inputs/basic_fuchsia_tree/bin \
161 // RUN:     -resource-dir=%S/Inputs/resource_dir_with_per_target_subdir \
162 // RUN:     -fuse-ld=lld 2>&1\
163 // RUN:     | FileCheck %s -check-prefixes=CHECK-MULTILIB-X86,CHECK-MULTILIB-COMPAT-X86
164 // CHECK-MULTILIB-X86: "-resource-dir" "[[RESOURCE_DIR:[^"]+]]"
165 // CHECK-MULTILIB-ASAN-X86: "-L{{.*}}{{/|\\\\}}..{{/|\\\\}}lib{{/|\\\\}}x86_64-unknown-fuchsia{{/|\\\\}}asan"
166 // CHECK-MULTILIB-NOEXCEPT-X86: "-L{{.*}}{{/|\\\\}}..{{/|\\\\}}lib{{/|\\\\}}x86_64-unknown-fuchsia{{/|\\\\}}noexcept"
167 // CHECK-MULTILIB-ASAN-NOEXCEPT-X86: "-L{{.*}}{{/|\\\\}}..{{/|\\\\}}lib{{/|\\\\}}x86_64-unknown-fuchsia{{/|\\\\}}asan+noexcept"
168 // CHECK-MULTILIB-RELATIVE-VTABLES-X86: "-L{{.*}}{{/|\\\\}}..{{/|\\\\}}lib{{/|\\\\}}x86_64-unknown-fuchsia{{/|\\\\}}relative-vtables"
169 // CHECK-MULTILIB-RELATIVE-VTABLES-NOEXCEPT-X86: "-L{{.*}}{{/|\\\\}}..{{/|\\\\}}lib{{/|\\\\}}x86_64-unknown-fuchsia{{/|\\\\}}relative-vtables+noexcept"
170 // CHECK-MULTILIB-RELATIVE-VTABLES-ASAN-X86: "-L{{.*}}{{/|\\\\}}..{{/|\\\\}}lib{{/|\\\\}}x86_64-unknown-fuchsia{{/|\\\\}}relative-vtables+asan"
171 // CHECK-MULTILIB-RELATIVE-VTABLES-ASAN-NOEXCEPT-X86: "-L{{.*}}{{/|\\\\}}..{{/|\\\\}}lib{{/|\\\\}}x86_64-unknown-fuchsia{{/|\\\\}}relative-vtables+asan+noexcept"
172 // CHECK-MULTILIB-HWASAN-X86: "-L{{.*}}{{/|\\\\}}..{{/|\\\\}}lib{{/|\\\\}}x86_64-unknown-fuchsia{{/|\\\\}}hwasan"
173 // CHECK-MULTILIB-HWASAN-NOEXCEPT-X86: "-L{{.*}}{{/|\\\\}}..{{/|\\\\}}lib{{/|\\\\}}x86_64-unknown-fuchsia{{/|\\\\}}hwasan+noexcept"
174 // CHECK-MULTILIB-RELATIVE-VTABLES-HWASAN-X86: "-L{{.*}}{{/|\\\\}}..{{/|\\\\}}lib{{/|\\\\}}x86_64-unknown-fuchsia{{/|\\\\}}relative-vtables+hwasan"
175 // CHECK-MULTILIB-RELATIVE-VTABLES-HWASAN-NOEXCEPT-X86: "-L{{.*}}{{/|\\\\}}..{{/|\\\\}}lib{{/|\\\\}}x86_64-unknown-fuchsia{{/|\\\\}}relative-vtables+hwasan+noexcept"
176 // CHECK-MULTILIB-COMPAT-X86: "-L{{.*}}{{/|\\\\}}..{{/|\\\\}}lib{{/|\\\\}}x86_64-unknown-fuchsia{{/|\\\\}}compat"
177 // CHECK-MULTILIB-X86: "-L{{.*}}{{/|\\\\}}..{{/|\\\\}}lib{{/|\\\\}}x86_64-unknown-fuchsia"
178