From: Eli Friedman Date: Wed, 22 Jul 2009 20:29:16 +0000 (+0000) Subject: Fix a nasty little use-after-free bug. X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=ab22c43320ae813e4f6214f48968216b7cb09b90;p=clang Fix a nasty little use-after-free bug. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@76779 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/AST/ASTContext.cpp b/lib/AST/ASTContext.cpp index d489d4e73f..4490e9a3a9 100644 --- a/lib/AST/ASTContext.cpp +++ b/lib/AST/ASTContext.cpp @@ -908,12 +908,14 @@ const ASTRecordLayout &ASTContext::getASTRecordLayout(const RecordDecl *D) { assert(D && "Cannot get layout of forward declarations!"); // Look up this layout, if already laid out, return what we have. - const ASTRecordLayout *&Entry = ASTRecordLayouts[D]; + // Note that we can't save a reference to the entry because this function + // is recursive. + const ASTRecordLayout *Entry = ASTRecordLayouts[D]; if (Entry) return *Entry; const ASTRecordLayout *NewEntry = ASTRecordLayoutBuilder::ComputeLayout(*this, D); - Entry = NewEntry; + ASTRecordLayouts[D] = NewEntry; return *NewEntry; }