yaxunl added a comment.

In D56411#1359275 <https://reviews.llvm.org/D56411#1359275>, @rjmccall wrote:

> In D56411#1352602 <https://reviews.llvm.org/D56411#1352602>, @yaxunl wrote:
>
> > In D56411#1352332 <https://reviews.llvm.org/D56411#1352332>, @rjmccall 
> > wrote:
> >
> > > This patch still doesn't make any sense.  You don't need to do any 
> > > special validation when passing a function as a template argument.  When 
> > > Sema instantiates the template definition, it'll rebuild the expressions 
> > > that refer to the template parameter, which will trigger the normal 
> > > checking for whether those expressions are illegally referencing a host 
> > > function from the device, etc.  All you need to do is suppress that 
> > > checking (whether it happens in a template definition or not) for 
> > > references from non-potentially-evaluated contexts.
> >
> >
> > If you look at line 6583 of lib/Sema/SemaTemplate.cpp, you will see clang 
> > does the check if the function needs overloading resolution. However, clang 
> > missed the check if the function does not need overloading resolution. 
> > That's why I need to add the check at line 6593. All the other stuff is 
> > just to help make this check.
> >
> > why clang does not do the reference check when there is no overloading 
> > resolution?
>
>
> We should have already done the check for a non-overloaded function reference 
> as part of building the DRE.  See `Sema::BuildDeclarationNameExpr`.  Template 
> argument checking can resolve an overload set based on the type of the 
> template parameter, so overload sets have to be treated specially there.
>
> > I think in usual cases clang already does that check during template 
> > argument parsing, so it does not need to do that again at line 6593. 
> > Unfortunately, for CUDA host/device check, it has to be skipped in template 
> > argument parsing and deferred to line 6593.
>
> Again, you really should not ever impose this restriction in template 
> arguments.


Sorry I do not quite get it. Are you suggesting there should be no diagnostics 
in the lit test kernel-template-with-func-arg.cu? Or do you think they should 
be diagnosed but should be done in a different way than the current approach? 
Thanks.


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

https://reviews.llvm.org/D56411



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

Reply via email to