15#include "lib/compile_context.h"
16#include "lib/cstring.h"
17#include "lib/error_reporter.h"
48template <
typename... Args>
49inline void error(
const char *format, Args &&...args) {
51 auto action = context.getDefaultErrorDiagnosticAction();
52 context.errorReporter().diagnose(action,
nullptr, format,
"", std::forward<Args>(args)...);
58template <
class T,
typename = std::enable_if_t<Util::has_SourceInfo_v<T>>,
class... Args>
59void error(
const int kind,
const char *format,
const T *node, Args &&...args) {
61 auto action = context.getDefaultErrorDiagnosticAction();
62 context.errorReporter().diagnose(action, kind, format,
"", node, std::forward<Args>(args)...);
66template <
class T,
typename = std::enable_if_t<Util::has_SourceInfo_v<T>>,
class... Args>
67void errorWithSuffix(
const int kind,
const char *format,
const char *suffix,
const T *node,
70 auto action = context.getDefaultErrorDiagnosticAction();
71 context.errorReporter().diagnose(action, kind, format, suffix, node,
72 std::forward<Args>(args)...);
76template <
class T,
typename = std::enable_if_t<Util::has_SourceInfo_v<T> && !std::is_po
inter_v<T>>,
78void error(
const int kind,
const char *format,
const T &node, Args &&...args) {
79 error(kind, format, &node, std::forward<Args>(args)...);
87template <
class T,
typename = std::enable_if_t<Util::has_SourceInfo_v<T>>,
class... Args>
88void error(
const char *format,
const T *node, Args &&...args) {
89 error(ErrorType::LEGACY_ERROR, format, node, std::forward<Args>(args)...);
94template <
class T,
typename = std::enable_if_t<Util::has_SourceInfo_v<T> && !std::is_po
inter_v<T>>,
96void error(
const char *format,
const T &node, Args &&...args) {
97 error(ErrorType::LEGACY_ERROR, format, node, std::forward<Args>(args)...);
103template <
typename... Args>
104void error(
const int kind,
const char *format, Args &&...args) {
106 auto action = context.getDefaultErrorDiagnosticAction();
107 context.errorReporter().diagnose(action, kind, format,
"", std::forward<Args>(args)...);
111#define ERROR_CHECK(e, ...) \
113 if (!(e)) ::P4::error(__VA_ARGS__); \
118template <
typename... Args>
119inline void warning(
const char *format, Args &&...args) {
121 auto action = context.getDefaultWarningDiagnosticAction();
122 context.errorReporter().diagnose(action,
nullptr, format,
"", std::forward<Args>(args)...);
127template <
class T,
typename = std::enable_if_t<Util::has_SourceInfo_v<T>>,
class... Args>
128void warning(
const int kind,
const char *format,
const T *node, Args &&...args) {
130 auto action = context.getDefaultWarningDiagnosticAction();
131 context.errorReporter().diagnose(action, kind, format,
"", node, std::forward<Args>(args)...);
135template <
class T,
typename = std::enable_if_t<Util::has_SourceInfo_v<T> && !std::is_po
inter_v<T>>,
137void warning(
const int kind,
const char *format,
const T &node, Args &&...args) {
138 ::P4::warning(kind, format, &node, std::forward<Args>(args)...);
143template <
typename... Args>
144void warning(
const int kind,
const char *format, Args &&...args) {
146 auto action = context.getDefaultWarningDiagnosticAction();
147 context.errorReporter().diagnose(action, kind, format,
"", std::forward<Args>(args)...);
151#define WARN_CHECK(e, ...) \
153 if (!(e)) ::P4::warning(__VA_ARGS__); \
157template <
class T,
typename = std::enable_if_t<Util::has_SourceInfo_v<T>>,
class... Args>
158void info(
const int kind,
const char *format,
const T *node, Args &&...args) {
160 auto action = context.getDefaultInfoDiagnosticAction();
161 context.errorReporter().diagnose(action, kind, format,
"", node, std::forward<Args>(args)...);
165template <
class T,
typename = std::enable_if_t<Util::has_SourceInfo_v<T> && !std::is_po
inter_v<T>>,
167void info(
const int kind,
const char *format,
const T &node, Args &&...args) {
168 ::P4::info(kind, format, &node, std::forward<Args>(args)...);
173template <
typename... Args>
174void info(
const int kind,
const char *format, Args &&...args) {
176 auto action = context.getDefaultInfoDiagnosticAction();
177 context.errorReporter().diagnose(action, kind, format,
"", std::forward<Args>(args)...);
virtual ErrorReporter & errorReporter()
Definition compile_context.cpp:54
static BaseCompileContext & get()
Definition compile_context.cpp:50
unsigned getDiagnosticCount() const
Definition error_reporter.h:178
TODO: this is not really specific to BMV2, it should reside somewhere else.
Definition applyOptionsPragmas.cpp:13
void warning(const char *format, Args &&...args)
Report a warning with the given message.
Definition lib/error.h:119
unsigned infoCount()
Definition lib/error.h:33
unsigned diagnosticCount()
Definition lib/error.h:37
unsigned warningCount()
Definition lib/error.h:28
void errorWithSuffix(const int kind, const char *format, const char *suffix, const T *node, Args &&...args)
This is similar to the above method, but also has a suffix.
Definition lib/error.h:67
void error(const char *format, Args &&...args)
Report an error with the given message.
Definition lib/error.h:49
void info(const int kind, const char *format, const T *node, Args &&...args)
Report info messages of type kind. Requires that the node argument have source info.
Definition lib/error.h:158
unsigned errorCount()
Definition lib/error.h:25