[PATCH] D28321: [CUDA] Add __declspec spellings for CUDA attributes.
Aaron Ballman via Phabricator via cfe-commits
cfe-commits at lists.llvm.org
Wed Jan 4 14:43:25 PST 2017
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
More information about the cfe-commits
mailing list