summaryrefslogtreecommitdiffstats
path: root/clang/lib/Sema/SemaTemplateInstantiateDecl.cpp
diff options
context:
space:
mode:
authorLarisse Voufo <lvoufo@google.com>2013-08-13 02:02:26 +0000
committerLarisse Voufo <lvoufo@google.com>2013-08-13 02:02:26 +0000
commita11bd8a7dc7edefd5dbdabfb4ef0391a09b93235 (patch)
tree934cebb4f96257a0f73d726d55e322c65a89c591 /clang/lib/Sema/SemaTemplateInstantiateDecl.cpp
parentdb8d30003544d4e8ce28ce64e9efd4e8d76df5f5 (diff)
downloadbcm5719-llvm-a11bd8a7dc7edefd5dbdabfb4ef0391a09b93235.tar.gz
bcm5719-llvm-a11bd8a7dc7edefd5dbdabfb4ef0391a09b93235.zip
variable templates updated for PCH serialization... Still working on test cases...
llvm-svn: 188249
Diffstat (limited to 'clang/lib/Sema/SemaTemplateInstantiateDecl.cpp')
-rw-r--r--clang/lib/Sema/SemaTemplateInstantiateDecl.cpp17
1 files changed, 14 insertions, 3 deletions
diff --git a/clang/lib/Sema/SemaTemplateInstantiateDecl.cpp b/clang/lib/Sema/SemaTemplateInstantiateDecl.cpp
index 315a405c6d3..5766afa1011 100644
--- a/clang/lib/Sema/SemaTemplateInstantiateDecl.cpp
+++ b/clang/lib/Sema/SemaTemplateInstantiateDecl.cpp
@@ -3481,11 +3481,22 @@ void Sema::InstantiateVariableDefinition(SourceLocation PointOfInstantiation,
llvm::PointerUnion<VarTemplateDecl *,
VarTemplatePartialSpecializationDecl *> PatternPtr =
VarSpec->getSpecializedTemplateOrPartial();
- if (PatternPtr.is<VarTemplatePartialSpecializationDecl *>())
+ if (PatternPtr.is<VarTemplatePartialSpecializationDecl *>()) {
PatternDecl = cast<VarDecl>(
PatternPtr.get<VarTemplatePartialSpecializationDecl *>());
- else
- PatternDecl = (PatternPtr.get<VarTemplateDecl *>())->getTemplatedDecl();
+
+ // Find actual definition
+ if (VarDecl *Def = PatternDecl->getDefinition(getASTContext()))
+ PatternDecl = Def;
+ } else {
+ VarTemplateDecl *PatternTemplate = PatternPtr.get<VarTemplateDecl *>();
+
+ // Find actual definition
+ if (VarTemplateDecl *Def = PatternTemplate->getDefinition())
+ PatternTemplate = Def;
+
+ PatternDecl = PatternTemplate->getTemplatedDecl();
+ }
assert(PatternDecl && "instantiating a non-template");
}
OpenPOWER on IntegriCloud