Skip to content

-Xarch_device fails to propagate -O1 #110325

@Artem-B

Description

@Artem-B

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":

} 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'

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions