]> granicus.if.org Git - clang/commit
Do not implicitly instantiate the definition of a class template specialization
authorRichard Smith <richard-llvm@metafoo.co.uk>
Tue, 14 Feb 2017 23:27:44 +0000 (23:27 +0000)
committerRichard Smith <richard-llvm@metafoo.co.uk>
Tue, 14 Feb 2017 23:27:44 +0000 (23:27 +0000)
commit44d0f7062d219377f1c93ada5ae676baf40381c1
tree544eeef27ffca0cf2a41027a8766ce797375328f
parent8e4aad78974956d3cc99409a2567494117611b47
Do not implicitly instantiate the definition of a class template specialization
that has been explicitly specialized!

We assume in various places that we can tell the template specialization kind
of a class type by looking at the declaration produced by TagType::getDecl.
That was previously not quite true: for an explicit specialization, we could
have first seen a template-id denoting the specialization (with a use that does
not trigger an implicit instantiation of the defintiion) and then seen the
first explicit specialization declaration. TagType::getDecl would previously
return an arbitrary declaration when called on a not-yet-defined class; it
now consistently returns the most recent declaration in that case.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@295118 91177308-0d34-0410-b5e6-96231b3b80d8
lib/AST/Type.cpp
test/SemaTemplate/explicit-specialization-member.cpp