]> granicus.if.org Git - clang/commit
[ASTImporter] Import the whole redecl chain of functions
authorGabor Marton <martongabesz@gmail.com>
Mon, 25 Jun 2018 14:41:58 +0000 (14:41 +0000)
committerGabor Marton <martongabesz@gmail.com>
Mon, 25 Jun 2018 14:41:58 +0000 (14:41 +0000)
commit029be8c2f349782b0075c78687ab09e87f0bdf4a
treef45f637e5f4a08e742081969199b8404cffba059
parent7f055b7e1a07716517c5ef7564aa95b7749fc2f7
[ASTImporter] Import the whole redecl chain of functions

Summary:
With this patch when any `FunctionDecl` of a redeclaration chain is imported
then we bring in the whole declaration chain.  This involves functions and
function template specializations.  Also friend functions are affected.  The
chain is imported as it is in the "from" tu, the order of the redeclarations
are kept.  I also changed the lookup logic in order to find friends, but first
making them visible in their declaration context.  We may have long
redeclaration chains if all TU contains the same prototype, but our
measurements shows no degradation in time of CTU analysis (Tmux, Xerces,
Bitcoin, Protobuf).  Also, as further work we could squash redundant
prototypes, but first ensure that functionality is working properly; then
should we optimize.

This may seem like a huge patch, sorry about that. But, most of the changes are
new tests, changes in the production code is not that much.  I also tried to
create a smaller patch which does not affect specializations, but that patch
failed to pass some of the `clang-import-test`s because there we import
function specializations. Also very importantly, we can't just change the
import of `FunctionDecl`s without changing the import of function template
specializations because they are handled as `FunctionDecl`s.

Reviewers: a.sidorin, r.stahl, xazax.hun, balazske

Subscribers: rnkovacs, dkrupp, cfe-commits

Differential Revision: https://reviews.llvm.org/D47532

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@335480 91177308-0d34-0410-b5e6-96231b3b80d8
include/clang/AST/ASTImporter.h
lib/AST/ASTImporter.cpp
lib/AST/DeclBase.cpp
test/ASTMerge/class/test.cpp
unittests/AST/ASTImporterTest.cpp