// RUN: %clang_cc1 -fsyntax-only -verify %s // The hd function template is instantiated three times. // // Two of those instantiations call a device function, which is an error when // compiling for host. Clang should report both errors. #include "Inputs/cuda.h" template struct Selector {}; template <> struct Selector { __host__ void f() {} }; template <> struct Selector { __device__ void f() {} // expected-note {{declared here}} }; template <> struct Selector { __device__ void f() {} // expected-note {{declared here}} }; template inline __host__ __device__ void hd() { Selector().f(); // expected-error@-1 2 {{reference to __device__ function}} } void host_fn() { hd(); hd(); // expected-note {{function template specialization 'hd'}} // expected-note@-1 {{called by 'host_fn'}} hd(); // expected-note {{function template specialization 'hd'}} // expected-note@-1 {{called by 'host_fn'}} }