diff options
author | Douglas Gregor <dgregor@apple.com> | 2009-10-15 14:05:49 +0000 |
---|---|---|
committer | Douglas Gregor <dgregor@apple.com> | 2009-10-15 14:05:49 +0000 |
commit | a8b89d26224a278dbe3562d69d1078611293f9f5 (patch) | |
tree | 0eef7ed47088b932e9f652e082dee892a3599a22 /clang/lib/Sema/SemaTemplate.cpp | |
parent | 68edf132137eb20fd3edbb418420b267da0237a4 (diff) | |
download | bcm5719-llvm-a8b89d26224a278dbe3562d69d1078611293f9f5.tar.gz bcm5719-llvm-a8b89d26224a278dbe3562d69d1078611293f9f5.zip |
Diagnose explicit instantiations of function templates and member
functions/static data members of class template specializations that
do not have definitions. This is the latter part of [temp.explicit]p4;
the former part still needs more testing.
llvm-svn: 84182
Diffstat (limited to 'clang/lib/Sema/SemaTemplate.cpp')
-rw-r--r-- | clang/lib/Sema/SemaTemplate.cpp | 9 |
1 files changed, 5 insertions, 4 deletions
diff --git a/clang/lib/Sema/SemaTemplate.cpp b/clang/lib/Sema/SemaTemplate.cpp index 04580b70b88..aa0c034a55c 100644 --- a/clang/lib/Sema/SemaTemplate.cpp +++ b/clang/lib/Sema/SemaTemplate.cpp @@ -3657,8 +3657,8 @@ Sema::ActOnExplicitInstantiation(Scope *S, CXXRecordDecl *Def = cast_or_null<CXXRecordDecl>(Pattern->getDefinition(Context)); if (!Def) { - Diag(TemplateLoc, diag::err_explicit_instantiation_undefined_member_class) - << Record->getDeclName() << Record->getDeclContext(); + Diag(TemplateLoc, diag::err_explicit_instantiation_undefined_member) + << 0 << Record->getDeclName() << Record->getDeclContext(); Diag(Pattern->getLocation(), diag::note_forward_declaration) << Pattern; return true; @@ -3787,7 +3787,8 @@ Sema::DeclResult Sema::ActOnExplicitInstantiation(Scope *S, // FIXME: Check for prior specializations and such. Prev->setTemplateSpecializationKind(TSK); if (TSK == TSK_ExplicitInstantiationDefinition) - InstantiateStaticDataMemberDefinition(D.getIdentifierLoc(), Prev, false); + InstantiateStaticDataMemberDefinition(D.getIdentifierLoc(), Prev, false, + /*DefinitionRequired=*/true); // FIXME: Create an ExplicitInstantiation node? return DeclPtrTy(); @@ -3887,7 +3888,7 @@ Sema::DeclResult Sema::ActOnExplicitInstantiation(Scope *S, // definition. if (TSK == TSK_ExplicitInstantiationDefinition) InstantiateFunctionDefinition(D.getIdentifierLoc(), Specialization, - false); + false, /*DefinitionRequired=*/true); Specialization->setTemplateSpecializationKind(TSK); break; |