diff options
author | Argyrios Kyrtzidis <akyrtzi@gmail.com> | 2010-06-28 09:31:34 +0000 |
---|---|---|
committer | Argyrios Kyrtzidis <akyrtzi@gmail.com> | 2010-06-28 09:31:34 +0000 |
commit | dc767e368471288bef8716d19b0e929647246bfc (patch) | |
tree | b1a2372398a3fb3a81ed5787059df20a0ef512e0 | |
parent | 926c4b486a08f698cd3a367fd6f1a3a07604358d (diff) |
Fix various bugs in recent commits for C++ PCH.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@106995 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r-- | lib/AST/DeclTemplate.cpp | 3 | ||||
-rw-r--r-- | lib/Frontend/PCHReader.cpp | 7 | ||||
-rw-r--r-- | lib/Frontend/PCHReaderDecl.cpp | 4 | ||||
-rw-r--r-- | lib/Frontend/PCHWriterDecl.cpp | 2 | ||||
-rw-r--r-- | test/PCH/cxx-templates.h | 1 |
5 files changed, 14 insertions, 3 deletions
diff --git a/lib/AST/DeclTemplate.cpp b/lib/AST/DeclTemplate.cpp index ca19d1ff03..5984eaaac1 100644 --- a/lib/AST/DeclTemplate.cpp +++ b/lib/AST/DeclTemplate.cpp @@ -393,7 +393,8 @@ TemplateArgumentList::TemplateArgumentList(ASTContext &Context, TemplateArgumentList::TemplateArgumentList(ASTContext &Context, const TemplateArgument *Args, - unsigned NumArgs) { + unsigned NumArgs) + : NumFlatArguments(0), NumStructuredArguments(0) { init(Context, Args, NumArgs); } diff --git a/lib/Frontend/PCHReader.cpp b/lib/Frontend/PCHReader.cpp index c220e269c2..386462443e 100644 --- a/lib/Frontend/PCHReader.cpp +++ b/lib/Frontend/PCHReader.cpp @@ -3012,8 +3012,11 @@ PCHReader::ReadTemplateArgument(const RecordData &Record, unsigned &Idx) { return TemplateArgument(GetType(Record[Idx++])); case TemplateArgument::Declaration: return TemplateArgument(GetDecl(Record[Idx++])); - case TemplateArgument::Integral: - return TemplateArgument(ReadAPSInt(Record, Idx), GetType(Record[Idx++])); + case TemplateArgument::Integral: { + llvm::APSInt Value = ReadAPSInt(Record, Idx); + QualType T = GetType(Record[Idx++]); + return TemplateArgument(Value, T); + } case TemplateArgument::Template: return TemplateArgument(ReadTemplateName(Record, Idx)); case TemplateArgument::Expression: diff --git a/lib/Frontend/PCHReaderDecl.cpp b/lib/Frontend/PCHReaderDecl.cpp index 028c563a07..d7c5d77eb9 100644 --- a/lib/Frontend/PCHReaderDecl.cpp +++ b/lib/Frontend/PCHReaderDecl.cpp @@ -216,6 +216,8 @@ void PCHDeclReader::VisitFunctionDecl(FunctionDecl *FD) { FD->setLocEnd(SourceLocation::getFromRawEncoding(Record[Idx++])); switch ((FunctionDecl::TemplatedKind)Record[Idx++]) { + default: assert(false && "Unhandled TemplatedKind!"); + break; case FunctionDecl::TK_NonTemplate: break; case FunctionDecl::TK_FunctionTemplate: @@ -257,6 +259,7 @@ void PCHDeclReader::VisitFunctionDecl(FunctionDecl *FD) { NumTemplateArgLocs, NumTemplateArgLocs ? TemplArgLocs.data() : 0, LAngleLoc, RAngleLoc); + break; } case FunctionDecl::TK_DependentFunctionTemplateSpecialization: { // Templates. @@ -273,6 +276,7 @@ void PCHDeclReader::VisitFunctionDecl(FunctionDecl *FD) { FD->setDependentTemplateSpecialization(*Reader.getContext(), TemplDecls, TemplArgs); + break; } } diff --git a/lib/Frontend/PCHWriterDecl.cpp b/lib/Frontend/PCHWriterDecl.cpp index 36a1848d2a..42d506953c 100644 --- a/lib/Frontend/PCHWriterDecl.cpp +++ b/lib/Frontend/PCHWriterDecl.cpp @@ -225,6 +225,8 @@ void PCHDeclWriter::VisitFunctionDecl(FunctionDecl *D) { Record.push_back(D->getTemplatedKind()); switch (D->getTemplatedKind()) { + default: assert(false && "Unhandled TemplatedKind!"); + break; case FunctionDecl::TK_NonTemplate: break; case FunctionDecl::TK_FunctionTemplate: diff --git a/test/PCH/cxx-templates.h b/test/PCH/cxx-templates.h index 840850d813..9446b08696 100644 --- a/test/PCH/cxx-templates.h +++ b/test/PCH/cxx-templates.h @@ -17,6 +17,7 @@ struct S<int, float> { template <typename T, int y> T templ_f(T x) { + int z = templ_f<int, 5>(3); return x+y; } |