From d437f23cca2cd16c27250a2a4328792e1601b272 Mon Sep 17 00:00:00 2001 From: Ted Kremenek Date: Tue, 13 Nov 2007 22:51:08 +0000 Subject: [PATCH] Fixed bug in FunctionDecl serialization where we crashed when the FunctionDecl had decls for its parameters but still had greater than 0 arguments. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@44076 91177308-0d34-0410-b5e6-96231b3b80d8 --- AST/DeclSerialization.cpp | 24 +++++++++++++++++------- 1 file changed, 17 insertions(+), 7 deletions(-) diff --git a/AST/DeclSerialization.cpp b/AST/DeclSerialization.cpp index 71706e3e51..b881cbe5b5 100644 --- a/AST/DeclSerialization.cpp +++ b/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)); -- 2.40.0