<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/110325>110325</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
-Xarch_device fails to propagate -O1
</td>
</tr>
<tr>
<th>Labels</th>
<td>
new issue
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
yxsamliu
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
Artem-B
</td>
</tr>
</table>
<pre>
Clang reports an error if one attempts to pass `-O1` to a CUDA/HIP sib-compilation via `-Xarch_device`:
```
bin/clang++ -x cuda /dev/null --offload-arch=sm_60 -Xarch_device -O1 -c -o /tmp/foo.o -nocudainc -nocudalib
clang++: error: invalid Xarch argument: '-Xarch_device -O1', not all driver options can be forwared via Xarch argument
clang++: error: invalid Xarch argument: '-Xarch_device -O1', not all driver options can be forwared via Xarch argument
```
It appears to be a bug. The code that handles `-Xarch..` options appears to misinterpret `-O1` as a clang-cl option "/O":
```
p *XarchArg->getOption().Info
$41 = {
Prefixes = llvm::ArrayRef of length 2 = {
{
<llvm::StringRef> = "/", <No data fields>},
{
<llvm::StringRef> = "-", <No data fields>}
},
PrefixedName = {
<llvm::StringRef> = "/O", <No data fields>},
HelpText = 0x55fb406ce5d4 "Set multiple /O flags at once; e.g. '/O2y-' for '/O2 /Oy-'",
HelpTextsForVariants = {
_M_elems = {
{
first = {
_M_elems = {
0,
0
}
},
second = 0x0
}
}
},
MetaVar = 0x55fb402591a2 "<flags>",
ID = 3005,
Kind = 4 '\004',
Param = 0 '\000',
Flags = 16,
Visibility = 66,
GroupID = 20,
AliasID = 0,
AliasArgs = 0x0,
Values = 0x0
}
```
This is the option here: https://github.com/llvm/llvm-project/blob/63899748738ce7449e46eebb1aeb7909f2fdea2b/clang/include/clang/Driver/Options.td#L8465
The option has `NoXarchOption` flag set, which triggers the error.
The correct option should've been this one:
https://github.com/llvm/llvm-project/blob/63899748738ce7449e46eebb1aeb7909f2fdea2b/clang/include/clang/Driver/Options.td#L929
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJzMVt1u2zoSfhr6ZiBDpv6sC184drUNdlsXbbfYu2AkjSQuKFEgKTd5-wNSSmynOac956pBIEtDzsw33_yQaIxoB6IdS-4Y50-PBnspJsY5S44rnGyn9G6vLfXB3apU9dPuIHFoQdOotDWAA5DWSoNoQA0EaC31ozVgFYxoDLA0DE4bloZOgnD473HPePH-_hMYUQaV6kch0Qo1wFmg3_0_1FX3UNNZVMTSkEV7Fh5Z-PxMw-Xff5ZiYLyoHCbG7xi_g-ARqqlGYLyo6cx4MUxSQhCoppEK68BZZ9HR9A9pCDfOIDhtIKggUE7Z9iPjRaPUWkEwKGdTDNXzqxTlDODKNYv2MxnuRQxnlKIG7wBQt1NPg3UrjGc_uGU8Y_wAg7KAUkKtxZk0qNERY6DCAUqCRunvqKn2TL2y-9theZWn-XlvAceRUPv6KAkQyqldw9eOoFI1ge3QQodDLclcimG9dvXzjODKQi-MGCzpUZO9qjQ0gODJCCq56IEraV6c3M9fVtQIjO-9271uAxa9a8mevAnGt4zn6_uhUYsmj-MNsOgILLubRfBJUyMeHfroCFKee-ct2u-1xqfP1IBqQNLQ2g74K02A2w8AFh0uFr5YLYb2MzUsejdr-oD88-C2flRQo0VoBMnasOgdy46MH_659eAnthdbt26W-OuP2NMbAf5CRKdfDuk9yfErPVqvHD4mSVPGYVpRUsfO1hey0E_SilGS6-gTNBJbA2hBDRWx6A5o3a7BF3xx4k8B45mr7BeJ1_LiGdNrx6ZQ-htqgYM1Pwb78OGBJPVvrPyQC4BGaGPf2vkzS_NfeJPpi_SV6CptF8GLpqFKDfXCZngL93hdR3-S-w9k8Rvqm3TwJN8g96mNDp5_l8YbNu-PXiMKw-RK-m-xQIl9OpJDGMbzaHopNdTYz85etoS3WwqfcLdlk16JvwkjSiGFffJr6fXav7SaxgUSv6J1LwWaRX7Ntpfv9eLG8XblB-VE5pbQF_benJBfO2FAGLAdPQ-ujjS5Wd1ZOxrXOa7pi1bYbirXleoZL3xPzT_BqNX_qbKMF6VUJeNFGm3zPIu3WbStKIvjnOKUqCw3SGWWh3nDm5qQl5dztBBDJaeariRHfwq4dpin8NrWjEf_2cZp8gz8Ahj97P6o_BRdZmca-u4DQ9Y19_dOVB1YLdqW9ByuP67Wt2S4Y0FrquyzbdOpSdaMZ2eCkmgA6whTA70M9d-Sp5znM7pVvYvqPMpxRbtNxrM4zRO-XXU7CmmbYBVt63iTRkm8qZswSjElTOqYl9FK7HjI4zDnGQ-jbbxd5w3GdZRnEdZRmJQli0PqUci1C2-tdLsSxky022zCiCcriSVJs9zzBvoOfnW56Omd56ScWsPiUApjzcWMFVbS7vae0KCQ8yVPqxFbtP7qsJq03P1t_j0Qw3ixID3v-B8BAAD__x0mB40">