tra added a comment.

Reduced test case:

  struct a {
    __attribute__((device)) a(short);
    __attribute__((device)) operator unsigned() const;
    __attribute__((device)) operator int() const;
  };
  struct b {
    a d;
  };
  void f(b g) { b e = g; }

Failure:

  $ bin/clang++ -x cuda aten.cc -fsyntax-only  
--cuda-path=$HOME/local/cuda-10.1 --cuda-device-only --cuda-gpu-arch=sm_60 
-stdlib=libc++ -std=c++17 -ferror-limit=1
  
  aten.cc:6:8: error: conversion from 'const a' to 'short' is ambiguous
  struct b {
         ^
  aten.cc:9:21: note: in implicit copy constructor for 'b' first required here
  void f(b g) { b e = g; }
                      ^
  aten.cc:3:27: note: candidate function
    __attribute__((device)) operator unsigned() const;
                            ^
  aten.cc:4:27: note: candidate function
    __attribute__((device)) operator int() const;
                            ^
  aten.cc:2:34: note: passing argument to parameter here
    __attribute__((device)) a(short);
                                   ^
  1 error generated when compiling for sm_60.

The same code compiles fine in C++ and I would expect it to work on device side 
the same way.


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D79526/new/

https://reviews.llvm.org/D79526



_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to