clang/unittests
Gabor Marton 2cd0afaeb3 [ASTImporter] Refactor Decl creation
Summary:
Generalize the creation of Decl nodes during Import.  With this patch we do the
same things after and before a new AST node is created (::Create) The import
logic should be really simple, we create the node, then we mark that as
imported, then we recursively import the parts for that node and then set them
on that node.  However, the AST is actually a graph, so we have to handle
circles.  If we mark something as imported (`MapImported()`) then we return with
the corresponding `To` decl whenever we want to import that node again, this way
circles are handled.  In order to make this algorithm work we must ensure
things, which are handled in the generic CreateDecl<> template:
* There are no `Import()` calls in between any node creation (::Create)
and the `MapImported()` call.
* Before actually creating an AST node (::Create), we must check if
the Node had been imported already, if yes then return with that one.
One very important case for this is connected to templates: we may
start an import both from the templated decl of a template and from
the template itself.

Now, the virtual `Imported` function is called in `ASTImporter::Impor(Decl *)`,
but only once, when the `Decl` is imported.  One point of this refactor is to
separate responsibilities. The original `Imported()` had 3 responsibilities:
- notify subclasses when an import happened
- register the decl into `ImportedDecls`
- initialise the Decl (set attributes, etc)
Now all of these are in separate functions:
- `Imported`
- `MapImported`
- `InitializeImportedDecl`
I tried to check all the clients, I executed tests for `ExternalASTMerger.cpp`
and some unittests for lldb.

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

Subscribers: rnkovacs, dkrupp, cfe-commits

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

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@336896 91177308-0d34-0410-b5e6-96231b3b80d8
2018-07-12 09:42:05 +00:00
..
AST [ASTImporter] Refactor Decl creation 2018-07-12 09:42:05 +00:00
ASTMatchers [ASTMatchers] A matcher for Objective-C @autoreleasepool 2018-07-06 21:36:04 +00:00
Analysis [CMake] Use PRIVATE in target_link_libraries for executables 2017-12-05 21:49:56 +00:00
Basic Revert "[VirtualFileSystem] InMemoryFileSystem::status: Return a Status with the requested name" 2018-07-11 18:43:07 +00:00
CodeGen Unit tests for TBAA metadata generation. 2017-12-22 15:22:45 +00:00
CrossTU IWYU for llvm-config.h in clang. See r331124 for details. 2018-04-30 13:52:15 +00:00
Driver Revert "[VirtualFileSystem] InMemoryFileSystem::status: Return a Status with the requested name" 2018-07-11 18:43:07 +00:00
Format [clang-format/ObjC] Put ObjC method arguments into one line when they fit 2018-07-09 07:08:45 +00:00
Frontend Fix build - use llvm::make_unique 2018-06-06 08:25:54 +00:00
Lex Reland '[clang] Adding CharacteristicKind to PPCallbacks::InclusionDirective' 2018-05-10 19:05:36 +00:00
Rename Unittests misc. typos 2018-02-06 13:12:29 +00:00
Rewrite [CMake] Use PRIVATE in target_link_libraries for executables 2017-12-05 21:49:56 +00:00
Sema [SemaCodeComplete] Make sure visited contexts are passed to completion results handler. 2018-07-04 10:01:18 +00:00
StaticAnalyzer Fix unittest build with GCC older than 5. 2018-06-28 13:31:36 +00:00
Tooling [clang][tooling] Don't forget to link to clangToolingInclusions. 2018-06-04 12:04:41 +00:00
libclang Revert r336590 "[libclang] evalute compound statement cursors before trying to evaluate" 2018-07-10 19:49:07 +00:00
CMakeLists.txt Add Cross Translation Unit support library 2017-09-22 11:11:01 +00:00