-
Notifications
You must be signed in to change notification settings - Fork 15.2k
Closed
Labels
clang:driver'clang' and 'clang++' user-facing binaries. Not 'clang-cl''clang' and 'clang++' user-facing binaries. Not 'clang-cl'
Description
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":
llvm-project/clang/lib/Driver/ToolChain.cpp
Line 1606 in 1fb3fe0
| } else if (XarchArg->getOption().hasFlag(options::NoXarchOption)) { |
(gdb) 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:
| def _SLASH_O : CLJoined<"O", [CLOption, DXCOption]>, |
The option has
NoXarchOption flag set, which triggers the error.
The correct option should've been this one:
| def O : Joined<["-"], "O">, Group<O_Group>, |
Metadata
Metadata
Labels
clang:driver'clang' and 'clang++' user-facing binaries. Not 'clang-cl''clang' and 'clang++' user-facing binaries. Not 'clang-cl'