aaron.ballman added inline comments.

================
Comment at: clang/include/clang/Basic/Attr.td:604
 
+// CUDA attributes are spelled __attribute__((attr)) or __declspec(__attr__).
+
----------------
jlebar wrote:
> aaron.ballman wrote:
> > jlebar wrote:
> > > aaron.ballman wrote:
> > > > For my own edification, do you have a link to some documentation of 
> > > > what CUDA attributes are spelled with `__declspec`?
> > > I do not believe such documentation exists.  It is an implementation 
> > > detail in the CUDA headers -- users never write `__attribute__((device))` 
> > > or `__declspec(__device__)`.  Instead, they write `__device__`.
> > Then why are we introducing `__declspec(__device__)` rather than a keyword 
> > attribute `__device__`?
> > 
> > My biggest concern is: I would like to verify that these actually should be 
> > supported as a `__declspec` attribute. From my simple testing in MSVC, it 
> > does not appear to support `__declspec(__device__)`, but perhaps I am doing 
> > it wrong (I'm mostly unfamiliar with CUDA). If this isn't something MSVC 
> > supports, then it is the first attribute we're supporting with a __declspec 
> > spelling that is not actually a Microsoft attribute, which is something 
> > worth discussing.
> > Then why are we introducing __declspec(__device__) rather than a keyword 
> > attribute __device__?
> 
> `__device__` is a macro defined in the CUDA headers, which must include and 
> we are not able to modify.
Okay, it makes sense as to why we can't have a keyword spelling, but it also 
doesn't answer why we need the `__declspec` spelling for it. Are you saying 
that there are CUDA headers out there where this attribute is spelled with 
`__attribute__` and others with `__declspec`? If so, then this change makes a 
bit more sense to me.


================
Comment at: clang/include/clang/Basic/Attr.td:610
   let LangOpts = [CUDA];
   let Documentation = [Undocumented];
 }
----------------
jlebar wrote:
> aaron.ballman wrote:
> > jlebar wrote:
> > > aaron.ballman wrote:
> > > > Now would be a good time to add the documentation for these attributes, 
> > > > otherwise there's a lot less chance users will know what ways they can 
> > > > spell the attributes (or what the attribute do).
> > > See above, these are an implementation detail.
> > We can still document that we support the attributes under their macro 
> > names, or do users not typically think of these macros as being attributes? 
> > I am mostly concerned about discoverability of the attributes -- how is a 
> > user to know what Clang does or does not support?
> > how is a user to know what Clang does or does not support?
> 
> These macros are fundamental to CUDA support.  The statement "you can compile 
> CUDA code with clang" will immediately imply to every CUDA developer in 
> existence the statement "you can use `__device__` in your code".
Yet we add new CUDA attributes periodically, and CUDA comes out with new 
versions and new features.

Looking at the CUDA docs, I see `__managed__`, but I don't see such an 
attribute in Clang. How is a user to know whether we do/don't support such a 
construct?


https://reviews.llvm.org/D28321



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

Reply via email to