yaxunl added a comment.

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

> In D56411#1365727 <https://reviews.llvm.org/D56411#1365727>, @yaxunl wrote:
>
> > In D56411#1360010 <https://reviews.llvm.org/D56411#1360010>, @rjmccall 
> > wrote:
> >
> > > I think the diagnostic should come during instantiation when you find an 
> > > evaluated use of a host function within a device function.
> >
> >
> > It seems the body of function template is checked only during parsing of 
> > the definition of the template itself. When a function
> >  template is instantiated, the body of the instantiated function is not 
> > checked again.
>
>
> No, that's not correct.  However, it's checked somewhat differently, and it's 
> possible that the existing diagnostic is not set up to fire along all common 
> paths.  Try moving the diagnostic to `MarkFunctionReferenced`, and note that 
> `OdrUse` will be `false` in all the unevaluated contexts.


You are right. After I disable current diagnostic, I saw 
PerformPendingInstantiations at the end of parsing the TU, where the AST of the 
instantiated function is iterated and MarkFunctionReferenced is called. I will 
try to fix my patch as suggested. 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