[PATCH] D25845: [CUDA] Ignore implicit target attributes during function template instantiation.
Artem Belevich via Phabricator via cfe-commits
cfe-commits at lists.llvm.org
Wed Dec 7 16:03:16 PST 2016
tra added inline comments.
================
Comment at: lib/Sema/SemaCUDA.cpp:99
+ if (!D->hasAttrs())
+ return false;
+ for (Attr *Attribute : D->getAttrs()) {
----------------
jlebar wrote:
> Is this early return necessary?
Yes. Otherwise D->getAttrs() will trigger assert(hasAttrs) if we don't have any attributes.
================
Comment at: lib/Sema/SemaCUDA.cpp:107
+ }
+ return false;
+}
----------------
jlebar wrote:
> Could we write this function as
>
> return llvm::any_of(D->getAttrs(), [&](Attr *Attribute) {
> return isa<A>(Attribute) && (!IgnoreImplicitAttr || !Attribute->isImplicit()) });
Done.
================
Comment at: lib/Sema/SemaCUDA.cpp:896
+ // needed to ensure that FD and its template have the same
+ // effective target.
+ if (CUDAGlobalAttr *Attr = OldFD->getAttr<CUDAGlobalAttr>()) {
----------------
jlebar wrote:
> This comment is confusing because this function's implementation doesn't have anything to do with templates, but the first sentence says we're copying from a template to "FD".
>
> In addition to cleaning this up, maybe we should move the comment into Sema.h?
I've changed second argument type to `const FunctionTemplateDecl*` to reflect my intent a bit better.
Moved the comment to Sema.h.
================
Comment at: lib/Sema/SemaTemplate.cpp:7048
// target attributes into account, we perform target match check
// here and reject candidates that have different target.
if (LangOpts.CUDA &&
----------------
jlebar wrote:
> Missing some articles:
>
> Target attributes are part of the cuda function signature, so the deduced template's cuda target must match XXX [1]. Given that regular template deduction [2] does not take target attributes into account, we reject candidates here that have a different target.
>
> [1] I am not sure what XXX should be. The deduced template's cuda target must match what, exactly?
>
> [2] What is "regular template deduction"?
[1] it must match the target of its template.
[2] "C++ template deduction"
Rephrased the comment based on IRL conversation w/ jlebar at .
================
Comment at: lib/Sema/SemaTemplate.cpp:7173
+ if (LangOpts.CUDA)
+ inheritCUDATargetAttrs(FD, Specialization);
+
----------------
jlebar wrote:
> Isn't this backwards? The function is `to, from`? If this is a bug, can we add a test to catch this?
The arguments have different types now, one of them const&, so it should be unambiguous what's input and what's output.
As for order of inputs/outputs, my mental model is `result=input` as in memcpy(dest, src). Style guide does not seem to say anything on order of input/output arguments.
https://reviews.llvm.org/D25845
More information about the cfe-commits
mailing list