Go to file
Gabor Marton 5254e64a8e Re-apply: [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, a_sidorin

Reviewed By: a_sidorin

Subscribers: labath, aprantl, a_sidorin, rnkovacs, dkrupp, cfe-commits

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

Re-apply commit rC335480

llvm-svn: 335731
2018-06-27 13:32:50 +00:00
clang Re-apply: [ASTImporter] Import the whole redecl chain of functions 2018-06-27 13:32:50 +00:00
clang-tools-extra [clangd] Sema ranking tweaks: downrank keywords and injected names. 2018-06-27 11:43:54 +00:00
compiler-rt [CMake] Tidy up the organisation of compiler-rt when configured as a standalone 2018-06-27 12:56:34 +00:00
debuginfo-tests [debuginfo-tests] Always use the system python to invoke llgdb.py. 2018-06-10 19:38:26 +00:00
libclc atom: Use volatile pointers for cl_khr_{global,local}_int32_{base,extended}_atomics 2018-06-21 19:27:39 +00:00
libcxx [CMake] Fix install-cxx target. 2018-06-25 18:01:51 +00:00
libcxxabi [CMake] Convert paths to the right form in standalone builds on Windows 2018-06-20 20:59:18 +00:00
libunwind [CMake] Convert paths to the right form in standalone builds on Windows 2018-06-20 20:53:19 +00:00
lld [PPC64] Add TLS global dynamic to local exec relaxation 2018-06-27 13:27:29 +00:00
lldb Add missing constness. 2018-06-27 07:01:07 +00:00
llgo Update copyright year to 2018. 2018-06-18 12:22:17 +00:00
llvm [ValueLattice] Return false if value range did not change in mergeIn. 2018-06-27 12:57:51 +00:00
openmp [OPENMP, NVPTX] Fixes for NVPTX RTL 2018-06-25 13:43:35 +00:00
parallel-libs Update copyright year to 2018. 2018-06-18 12:22:17 +00:00
polly [ZoneAlgo] Use getDefToTarget in makeValInst. NFC. 2018-06-26 14:29:09 +00:00
README.md

README.md

Low Level Virtual Machine (LLVM)

This directory and its subdirectories contain source code for LLVM, a toolkit for the construction of highly optimized compilers, optimizers, and runtime environments.