aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorArgyrios Kyrtzidis <akyrtzi@gmail.com>2010-06-28 09:31:34 +0000
committerArgyrios Kyrtzidis <akyrtzi@gmail.com>2010-06-28 09:31:34 +0000
commitdc767e368471288bef8716d19b0e929647246bfc (patch)
treeb1a2372398a3fb3a81ed5787059df20a0ef512e0
parent926c4b486a08f698cd3a367fd6f1a3a07604358d (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.cpp3
-rw-r--r--lib/Frontend/PCHReader.cpp7
-rw-r--r--lib/Frontend/PCHReaderDecl.cpp4
-rw-r--r--lib/Frontend/PCHWriterDecl.cpp2
-rw-r--r--test/PCH/cxx-templates.h1
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;
}