]> granicus.if.org Git - clang/commit
[ASTImporter] Mark erroneous nodes in from ctx
authorGabor Marton <gabor.marton@ericsson.com>
Mon, 1 Jul 2019 14:19:53 +0000 (14:19 +0000)
committerGabor Marton <gabor.marton@ericsson.com>
Mon, 1 Jul 2019 14:19:53 +0000 (14:19 +0000)
commit3c1027533cbbb03e14b8754e7d6731f6bb9c43b3
tree8f684198c681fee1fe38d6018af526d6ea871b3f
parentc5dc3be894b5da943a897afaf80d27c688417425
[ASTImporter] Mark erroneous nodes in from ctx

Summary:
During import of a specific Decl D, it may happen that some AST nodes
had already been created before we recognize an error. In this case we
signal back the error to the caller, but the "to" context remains
polluted with those nodes which had been created. Ideally, those nodes
should not had been created, but that time we did not know about the
error, the error happened later.  Since the AST is immutable (most of
the cases we can't remove existing nodes) we choose to mark these nodes
as erroneous.
Here are the steps of the algorithm:
1) We keep track of the nodes which we visit during the import of D: See
ImportPathTy.
2) If a Decl is already imported and it is already on the import path
(we have a cycle) then we copy/store the relevant part of the import
path. We store these cycles for each Decl.
3) When we recognize an error during the import of D then we set up this
error to all Decls in the stored cycles for D and we clear the stored
cycles.

Reviewers: a_sidorin, a.sidorin, shafik

Subscribers: rnkovacs, dkrupp, Szelethus, gamesh411, cfe-commits

Tags: #clang

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

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