diff options
author | Ted Kremenek <kremenek@apple.com> | 2007-11-13 22:51:08 +0000 |
---|---|---|
committer | Ted Kremenek <kremenek@apple.com> | 2007-11-13 22:51:08 +0000 |
commit | d437f23cca2cd16c27250a2a4328792e1601b272 (patch) | |
tree | 10ac124382d81ac88157b7329d9503dbd1b3e862 /AST/DeclSerialization.cpp | |
parent | ea2fe9b435e1b55135de32dcac97366554706ac4 (diff) |
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
Diffstat (limited to 'AST/DeclSerialization.cpp')
-rw-r--r-- | AST/DeclSerialization.cpp | 24 |
1 files 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**>(&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**>(&decl->ParamInfo[0]), + decl->Body, next_declarator); + else + D.BatchReadOwnedPtrs(decl->Body, next_declarator); decl->setNextDeclarator(cast_or_null<ScopedDecl>(next_declarator)); |