]> granicus.if.org Git - clang/commit
[CUDA] Ignore implicit target attributes during function template instantiation.
authorArtem Belevich <tra@google.com>
Thu, 8 Dec 2016 19:38:13 +0000 (19:38 +0000)
committerArtem Belevich <tra@google.com>
Thu, 8 Dec 2016 19:38:13 +0000 (19:38 +0000)
commit60741365b3dfa31f947a62bdcac6be76b9b5d7f0
tree537da3a91c818e7d079f641dc33fa33ca69dfe1d
parent3f2235cfd4a477298132295464f0f60ac23e427a
[CUDA] Ignore implicit target attributes during function template instantiation.

Some functions and templates are treated as __host__ __device__ even
when they don't have explicitly specified target attributes.
What's worse, this treatment may change depending on command line
options (-fno-cuda-host-device-constexpr) or
#pragma clang force_cuda_host_device.

Combined with strict checking for matching function target that comes
with D25809(r288962), it makes it hard to write code which would
explicitly instantiate or specialize some functions regardless of
pragmas or command line options in effect.

This patch changes the way we match target attributes of base template
vs attributes used in explicit instantiation or specialization so that
only explicitly specified attributes are considered. This makes base
template selection behave consistently regardless of pragma of command
line options that may affect CUDA target.

Differential Revision: https://reviews.llvm.org/D25845

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@289091 91177308-0d34-0410-b5e6-96231b3b80d8
include/clang/Sema/Sema.h
lib/Sema/SemaCUDA.cpp
lib/Sema/SemaDecl.cpp
lib/Sema/SemaTemplate.cpp
test/SemaCUDA/function-template-overload.cu