From d86dcfe8caa1b1cacc98bb0c2084081c351627d1 Mon Sep 17 00:00:00 2001 From: Ted Kremenek Date: Tue, 13 Nov 2007 22:51:08 +0000 Subject: Fixed bug in FunctionDecl serialization where we crashed when the FunctionDecl had decls for its parameters but still had greater than 0 arguments. llvm-svn: 44076 --- clang/AST/DeclSerialization.cpp | 24 +++++++++++++++++------- 1 file changed, 17 insertions(+), 7 deletions(-) (limited to 'clang/AST/DeclSerialization.cpp') diff --git a/clang/AST/DeclSerialization.cpp b/clang/AST/DeclSerialization.cpp index 71706e3e518..b881cbe5b50 100644 --- a/clang/AST/DeclSerialization.cpp +++ b/clang/AST/DeclSerialization.cpp @@ -226,9 +226,15 @@ void FunctionDecl::EmitImpl(Serializer& S) const { // NOTE: We do not need to serialize out the number of parameters, because // that is encoded in the type (accessed via getNumParams()). - S.BatchEmitOwnedPtrs(getNumParams(),&ParamInfo[0], // From FunctionDecl. - Body, // From FunctionDecl. - getNextDeclarator()); // From ScopedDecl. + if (ParamInfo != NULL) { + S.EmitBool(true); + S.BatchEmitOwnedPtrs(getNumParams(),&ParamInfo[0], Body, + getNextDeclarator()); + } + else { + S.EmitBool(false); + S.BatchEmitOwnedPtrs(Body,getNextDeclarator()); + } } FunctionDecl* FunctionDecl::CreateImpl(Deserializer& D) { @@ -247,10 +253,14 @@ FunctionDecl* FunctionDecl::CreateImpl(Deserializer& D) { Decl* next_declarator; - D.BatchReadOwnedPtrs(decl->getNumParams(), - reinterpret_cast(&decl->ParamInfo[0]), // FunctionDecl. - decl->Body, // From FunctionDecl. - next_declarator); // From ScopedDecl. + bool hasParamDecls = D.ReadBool(); + + if (hasParamDecls) + D.BatchReadOwnedPtrs(decl->getNumParams(), + reinterpret_cast(&decl->ParamInfo[0]), + decl->Body, next_declarator); + else + D.BatchReadOwnedPtrs(decl->Body, next_declarator); decl->setNextDeclarator(cast_or_null(next_declarator)); -- cgit v1.2.3