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