Parse: Template specializations which aren't dependent needn't have their parsing be delayed
Summary: We should treat a non-dependent template specialization like it wasn't templated at all. Reviewers: rsmith CC: cfe-commits Differential Revision: http://llvm-reviews.chandlerc.com/D1554 llvm-svn: 190743
This commit is contained in:
parent
9e73fe65db
commit
90b1729af9
|
@ -113,11 +113,12 @@ NamedDecl *Parser::ParseCXXInlineMethodDef(AccessSpecifier AS,
|
|||
// In delayed template parsing mode, if we are within a class template
|
||||
// or if we are about to parse function member template then consume
|
||||
// the tokens and store them for parsing at the end of the translation unit.
|
||||
if (getLangOpts().DelayedTemplateParsing &&
|
||||
DefinitionKind == FDK_Definition &&
|
||||
if (getLangOpts().DelayedTemplateParsing &&
|
||||
DefinitionKind == FDK_Definition &&
|
||||
((Actions.CurContext->isDependentContext() ||
|
||||
TemplateInfo.Kind != ParsedTemplateInfo::NonTemplate) &&
|
||||
!Actions.IsInsideALocalClassWithinATemplateFunction())) {
|
||||
(TemplateInfo.Kind != ParsedTemplateInfo::NonTemplate &&
|
||||
TemplateInfo.Kind != ParsedTemplateInfo::ExplicitSpecialization)) &&
|
||||
!Actions.IsInsideALocalClassWithinATemplateFunction())) {
|
||||
|
||||
CachedTokens Toks;
|
||||
LexTemplateFunctionForLateParsing(Toks);
|
||||
|
|
|
@ -0,0 +1,18 @@
|
|||
// RUN: %clang_cc1 -std=c++11 -emit-llvm %s -o - -cxx-abi microsoft -fms-extensions -fdelayed-template-parsing -triple=i386-pc-win32 | FileCheck %s
|
||||
// RUN: %clang_cc1 -std=c++11 -emit-llvm %s -o - -cxx-abi microsoft -fms-extensions -fdelayed-template-parsing -triple=x86_64-pc-win32 | FileCheck -check-prefix X64 %s
|
||||
|
||||
namespace ClassScopeSpecialization {
|
||||
struct Type {
|
||||
template <int i>
|
||||
void Foo() {}
|
||||
template <>
|
||||
void Foo<0>() {}
|
||||
};
|
||||
|
||||
void call() {
|
||||
Type T;
|
||||
// CHECK: call {{.*}} @"\01??$Foo@$0A@@Type@ClassScopeSpecialization@@QAEXXZ"
|
||||
// X64: call {{.*}} @"\01??$Foo@$0A@@Type@ClassScopeSpecialization@@QEAAXXZ"
|
||||
T.Foo<0>();
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue