diff options
Diffstat (limited to 'include/llvm/IR/DiagnosticHandler.h')
| -rw-r--r-- | include/llvm/IR/DiagnosticHandler.h | 75 |
1 files changed, 75 insertions, 0 deletions
diff --git a/include/llvm/IR/DiagnosticHandler.h b/include/llvm/IR/DiagnosticHandler.h new file mode 100644 index 000000000000..9256d4850df1 --- /dev/null +++ b/include/llvm/IR/DiagnosticHandler.h @@ -0,0 +1,75 @@ +//===- DiagnosticHandler.h - DiagnosticHandler class for LLVM -*- C++ ---*-===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// +// Base DiagnosticHandler class declaration. Derive from this class to provide +// custom diagnostic reporting. +//===----------------------------------------------------------------------===// + +#ifndef LLVM_IR_DIAGNOSTICHANDLER_H +#define LLVM_IR_DIAGNOSTICHANDLER_H + +#include "llvm/ADT/StringRef.h" + +namespace llvm { +class DiagnosticInfo; + +/// \brief This is the base class for diagnostic handling in LLVM. +/// The handleDiagnostics method must be overriden by the subclasses to handle +/// diagnostic. The *RemarkEnabled methods can be overriden to control +/// which remarks are enabled. +struct DiagnosticHandler { + void *DiagnosticContext = nullptr; + DiagnosticHandler(void *DiagContext = nullptr) + : DiagnosticContext(DiagContext) {} + virtual ~DiagnosticHandler() = default; + + using DiagnosticHandlerTy = void (*)(const DiagnosticInfo &DI, void *Context); + + /// DiagHandlerCallback is settable from the C API and base implementation + /// of DiagnosticHandler will call it from handleDiagnostics(). Any derived + /// class of DiagnosticHandler should not use callback but + /// implement handleDiagnostics(). + DiagnosticHandlerTy DiagHandlerCallback = nullptr; + + /// Override handleDiagnostics to provide custom implementation. + /// Return true if it handles diagnostics reporting properly otherwise + /// return false to make LLVMContext::diagnose() to print the message + /// with a prefix based on the severity. + virtual bool handleDiagnostics(const DiagnosticInfo &DI) { + if (DiagHandlerCallback) { + DiagHandlerCallback(DI, DiagnosticContext); + return true; + } + return false; + } + + /// Return true if analysis remarks are enabled, override + /// to provide different implementation. + virtual bool isAnalysisRemarkEnabled(StringRef PassName) const; + + /// Return true if missed optimization remarks are enabled, override + /// to provide different implementation. + virtual bool isMissedOptRemarkEnabled(StringRef PassName) const; + + /// Return true if passed optimization remarks are enabled, override + /// to provide different implementation. + virtual bool isPassedOptRemarkEnabled(StringRef PassName) const; + + /// Return true if any type of remarks are enabled for this pass. + bool isAnyRemarkEnabled(StringRef PassName) const { + return (isMissedOptRemarkEnabled(PassName) || + isPassedOptRemarkEnabled(PassName) || + isAnalysisRemarkEnabled(PassName)); + } + + /// Return true if any type of remarks are enabled for any pass. + virtual bool isAnyRemarkEnabled() const; +}; +} // namespace llvm + +#endif // LLVM_IR_DIAGNOSTICHANDLER_H |
