diff options
author | Eli Friedman <eli.friedman@gmail.com> | 2008-05-27 05:07:37 +0000 |
---|---|---|
committer | Eli Friedman <eli.friedman@gmail.com> | 2008-05-27 05:07:37 +0000 |
commit | 2742496d75ecb733c07c65c9a35cbfaa88ca81e4 (patch) | |
tree | fc97fc62d8afa7c10a1d7eff744df97b1f8a0a3e /lib/Sema/SemaDecl.cpp | |
parent | 6f7e2eee917a136ffc36834f020782b3f15d8fa6 (diff) |
Don't swap function decls, and add them to the scope as they are
encountered. Mixing up the decls is unintuitive, and confuses the AST
destruction code. Fixes PR2360.
Note that there is a need to look up the characteristics and
declarations of a function associated with a particular name or decl,
but the original swapping code doesn't solve it properly.
http://lists.cs.uiuc.edu/pipermail/cfe-dev/2008-May/001644.html is one
suggestion for how to fix that.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@51584 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/Sema/SemaDecl.cpp')
-rw-r--r-- | lib/Sema/SemaDecl.cpp | 8 |
1 files changed, 1 insertions, 7 deletions
diff --git a/lib/Sema/SemaDecl.cpp b/lib/Sema/SemaDecl.cpp index 8b89045a71..2856403ccf 100644 --- a/lib/Sema/SemaDecl.cpp +++ b/lib/Sema/SemaDecl.cpp @@ -910,13 +910,7 @@ Sema::ActOnDeclarator(Scope *S, Declarator &D, DeclTy *lastDecl) { NewFD = MergeFunctionDecl(NewFD, PrevDecl, Redeclaration); if (NewFD == 0) return 0; if (Redeclaration) { - // Note that the new declaration is a redeclaration of the - // older declaration. Then return the older declaration: the - // new one is only kept within the set of previous - // declarations for this function. - FunctionDecl *OldFD = (FunctionDecl *)PrevDecl; - OldFD->AddRedeclaration(NewFD); - return OldFD; + NewFD->setPreviousDeclaration(cast<FunctionDecl>(PrevDecl)); } } New = NewFD; |