summaryrefslogtreecommitdiffstats
path: root/clang/lib/Sema/SemaTemplate.cpp
diff options
context:
space:
mode:
authorDouglas Gregor <dgregor@apple.com>2009-10-15 14:05:49 +0000
committerDouglas Gregor <dgregor@apple.com>2009-10-15 14:05:49 +0000
commita8b89d26224a278dbe3562d69d1078611293f9f5 (patch)
tree0eef7ed47088b932e9f652e082dee892a3599a22 /clang/lib/Sema/SemaTemplate.cpp
parent68edf132137eb20fd3edbb418420b267da0237a4 (diff)
downloadbcm5719-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.cpp9
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;
OpenPOWER on IntegriCloud