diff options
author | Larisse Voufo <lvoufo@google.com> | 2013-08-13 02:02:26 +0000 |
---|---|---|
committer | Larisse Voufo <lvoufo@google.com> | 2013-08-13 02:02:26 +0000 |
commit | a11bd8a7dc7edefd5dbdabfb4ef0391a09b93235 (patch) | |
tree | 934cebb4f96257a0f73d726d55e322c65a89c591 /clang/lib/Sema/SemaTemplateInstantiateDecl.cpp | |
parent | db8d30003544d4e8ce28ce64e9efd4e8d76df5f5 (diff) | |
download | bcm5719-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.cpp | 17 |
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"); } |