Fix various bugs in recent commits for C++ PCH.
llvm-svn: 106995
This commit is contained in:
parent
2d69ec7a72
commit
0b0369a6b3
|
@ -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);
|
||||
}
|
||||
|
||||
|
|
|
@ -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:
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -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:
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue