forked from OSchip/llvm-project
Frontend: Propagate ASTReaderListener API in ChainedASTReaderListener
ASTReaderListener's documentation states that visitInputFile will be called based on the return values of needsInputFileVisitation and needsSystemInputFileVisitation, but ChainedASTReaderListener may call these methods on a child listener based on the values returned by the other child. Even worse, the calls to visitInputFile may be short-circuited due to the use of the boolean or, so the calls to visit may not occur at all for the second listener. This updates ChainedASTReaderListener::visitInputFile to propagate the ASTReaderListener behaviour to both children. llvm-svn: 209394
This commit is contained in:
parent
9dd60cfb64
commit
c65a66ddfe
|
@ -135,8 +135,14 @@ void ChainedASTReaderListener::visitModuleFile(StringRef Filename) {
|
|||
bool ChainedASTReaderListener::visitInputFile(StringRef Filename,
|
||||
bool isSystem,
|
||||
bool isOverridden) {
|
||||
return First->visitInputFile(Filename, isSystem, isOverridden) ||
|
||||
Second->visitInputFile(Filename, isSystem, isOverridden);
|
||||
bool Continue = false;
|
||||
if (First->needsInputFileVisitation() &&
|
||||
(!isSystem || First->needsSystemInputFileVisitation()))
|
||||
Continue |= First->visitInputFile(Filename, isSystem, isOverridden);
|
||||
if (Second->needsInputFileVisitation() &&
|
||||
(!isSystem || Second->needsSystemInputFileVisitation()))
|
||||
Continue |= Second->visitInputFile(Filename, isSystem, isOverridden);
|
||||
return Continue;
|
||||
}
|
||||
|
||||
//===----------------------------------------------------------------------===//
|
||||
|
|
Loading…
Reference in New Issue