diff options
Diffstat (limited to 'clang/lib')
-rw-r--r-- | clang/lib/ARCMigrate/ARCMT.cpp | 10 | ||||
-rw-r--r-- | clang/lib/ARCMigrate/ARCMTActions.cpp | 17 | ||||
-rw-r--r-- | clang/lib/ARCMigrate/Internals.h | 2 | ||||
-rw-r--r-- | clang/lib/Frontend/FrontendAction.cpp | 8 |
4 files changed, 25 insertions, 12 deletions
diff --git a/clang/lib/ARCMigrate/ARCMT.cpp b/clang/lib/ARCMigrate/ARCMT.cpp index a93f1c62c0e..99980345c40 100644 --- a/clang/lib/ARCMigrate/ARCMT.cpp +++ b/clang/lib/ARCMigrate/ARCMT.cpp @@ -79,6 +79,14 @@ void CapturedDiagList::reportDiagnostics(Diagnostic &Diags) const { Diags.Report(*I); } +bool CapturedDiagList::hasErrors() const { + for (ListTy::const_iterator I = List.begin(), E = List.end(); I != E; ++I) + if (I->getLevel() >= Diagnostic::Error) + return true; + + return false; +} + namespace { class CaptureDiagnosticClient : public DiagnosticClient { @@ -236,7 +244,7 @@ bool arcmt::checkForManualIssues(CompilerInvocation &origCI, DiagClient->EndSourceFile(); - return Diags->getClient()->getNumErrors() > 0; + return capturedDiags.hasErrors(); } //===----------------------------------------------------------------------===// diff --git a/clang/lib/ARCMigrate/ARCMTActions.cpp b/clang/lib/ARCMigrate/ARCMTActions.cpp index 4da928a0ebf..7de62d289ce 100644 --- a/clang/lib/ARCMigrate/ARCMTActions.cpp +++ b/clang/lib/ARCMigrate/ARCMTActions.cpp @@ -14,29 +14,24 @@ using namespace clang; using namespace arcmt; -void CheckAction::ExecuteAction() { - CompilerInstance &CI = getCompilerInstance(); +bool CheckAction::BeginInvocation(CompilerInstance &CI) { if (arcmt::checkForManualIssues(CI.getInvocation(), getCurrentFile(), getCurrentFileKind(), CI.getDiagnostics().getClient())) - return; + return false; // errors, stop the action. // We only want to see warnings reported from arcmt::checkForManualIssues. CI.getDiagnostics().setIgnoreAllWarnings(true); - WrapperFrontendAction::ExecuteAction(); + return true; } CheckAction::CheckAction(FrontendAction *WrappedAction) : WrapperFrontendAction(WrappedAction) {} -void TransformationAction::ExecuteAction() { - CompilerInstance &CI = getCompilerInstance(); - if (arcmt::applyTransformations(CI.getInvocation(), getCurrentFile(), +bool TransformationAction::BeginInvocation(CompilerInstance &CI) { + return !arcmt::applyTransformations(CI.getInvocation(), getCurrentFile(), getCurrentFileKind(), - CI.getDiagnostics().getClient())) - return; - - WrapperFrontendAction::ExecuteAction(); + CI.getDiagnostics().getClient()); } TransformationAction::TransformationAction(FrontendAction *WrappedAction) diff --git a/clang/lib/ARCMigrate/Internals.h b/clang/lib/ARCMigrate/Internals.h index d0d545ec517..4f9b138a06c 100644 --- a/clang/lib/ARCMigrate/Internals.h +++ b/clang/lib/ARCMigrate/Internals.h @@ -30,6 +30,8 @@ public: bool hasDiagnostic(llvm::ArrayRef<unsigned> IDs, SourceRange range) const; void reportDiagnostics(Diagnostic &diags) const; + + bool hasErrors() const; }; class TransformActions { diff --git a/clang/lib/Frontend/FrontendAction.cpp b/clang/lib/Frontend/FrontendAction.cpp index 0024818ad85..0128d6ee053 100644 --- a/clang/lib/Frontend/FrontendAction.cpp +++ b/clang/lib/Frontend/FrontendAction.cpp @@ -130,6 +130,9 @@ bool FrontendAction::BeginSourceFile(CompilerInstance &CI, setCurrentFile(Filename, InputKind); setCompilerInstance(&CI); + if (!BeginInvocation(CI)) + goto failure; + // AST files follow a very different path, since they share objects via the // AST unit. if (InputKind == IK_AST) { @@ -386,8 +389,13 @@ ASTConsumer *WrapperFrontendAction::CreateASTConsumer(CompilerInstance &CI, llvm::StringRef InFile) { return WrappedAction->CreateASTConsumer(CI, InFile); } +bool WrapperFrontendAction::BeginInvocation(CompilerInstance &CI) { + return WrappedAction->BeginInvocation(CI); +} bool WrapperFrontendAction::BeginSourceFileAction(CompilerInstance &CI, llvm::StringRef Filename) { + WrappedAction->setCurrentFile(getCurrentFile(), getCurrentFileKind()); + WrappedAction->setCompilerInstance(&CI); return WrappedAction->BeginSourceFileAction(CI, Filename); } void WrapperFrontendAction::ExecuteAction() { |