summaryrefslogtreecommitdiffstats
path: root/clang/lib/Sema/SemaTemplateInstantiate.cpp
diff options
context:
space:
mode:
authorDouglas Gregor <dgregor@apple.com>2009-09-29 14:38:03 +0000
committerDouglas Gregor <dgregor@apple.com>2009-09-29 14:38:03 +0000
commita49cb4e4942d8b03bf9088fd43a11fc629a09c0c (patch)
treef225ddf47bb4a20c60cd7a1d4dc467a1285f5d65 /clang/lib/Sema/SemaTemplateInstantiate.cpp
parent139c3dba535d6d2050140d18e7fcab21a558cff5 (diff)
downloadbcm5719-llvm-a49cb4e4942d8b03bf9088fd43a11fc629a09c0c.tar.gz
bcm5719-llvm-a49cb4e4942d8b03bf9088fd43a11fc629a09c0c.zip
Slightly improve the semantics of extern templates for member functions of class templates
llvm-svn: 83063
Diffstat (limited to 'clang/lib/Sema/SemaTemplateInstantiate.cpp')
-rw-r--r--clang/lib/Sema/SemaTemplateInstantiate.cpp5
1 files changed, 3 insertions, 2 deletions
diff --git a/clang/lib/Sema/SemaTemplateInstantiate.cpp b/clang/lib/Sema/SemaTemplateInstantiate.cpp
index 90a03972cc1..9c96b33cd0e 100644
--- a/clang/lib/Sema/SemaTemplateInstantiate.cpp
+++ b/clang/lib/Sema/SemaTemplateInstantiate.cpp
@@ -977,10 +977,11 @@ Sema::InstantiateClassMembers(SourceLocation PointOfInstantiation,
DEnd = Instantiation->decls_end();
D != DEnd; ++D) {
if (FunctionDecl *Function = dyn_cast<FunctionDecl>(*D)) {
- if (!Function->getBody())
+ if (!Function->getBody() && TSK != TSK_ExplicitInstantiationDeclaration)
InstantiateFunctionDefinition(PointOfInstantiation, Function);
} else if (VarDecl *Var = dyn_cast<VarDecl>(*D)) {
- if (Var->isStaticDataMember())
+ if (Var->isStaticDataMember() &&
+ TSK != TSK_ExplicitInstantiationDeclaration)
InstantiateStaticDataMemberDefinition(PointOfInstantiation, Var);
} else if (CXXRecordDecl *Record = dyn_cast<CXXRecordDecl>(*D)) {
if (!Record->isInjectedClassName() && !Record->getDefinition(Context)) {
OpenPOWER on IntegriCloud