24#include "lib/compile_context.h"
25#include "lib/cstring.h"
26#include "lib/error_reporter.h"
57template <
typename... Args>
58inline void error(
const char *format, Args &&...args) {
60 auto action = context.getDefaultErrorDiagnosticAction();
61 context.errorReporter().diagnose(action,
nullptr, format,
"", std::forward<Args>(args)...);
67template <
class T,
typename = std::enable_if_t<Util::has_SourceInfo_v<T>>,
class... Args>
68void error(
const int kind,
const char *format,
const T *node, Args &&...args) {
70 auto action = context.getDefaultErrorDiagnosticAction();
71 context.errorReporter().diagnose(action, kind, format,
"", node, std::forward<Args>(args)...);
75template <
class T,
typename = std::enable_if_t<Util::has_SourceInfo_v<T>>,
class... Args>
76void errorWithSuffix(
const int kind,
const char *format,
const char *suffix,
const T *node,
79 auto action = context.getDefaultErrorDiagnosticAction();
80 context.errorReporter().diagnose(action, kind, format, suffix, node,
81 std::forward<Args>(args)...);
85template <
class T,
typename = std::enable_if_t<Util::has_SourceInfo_v<T> && !std::is_po
inter_v<T>>,
87void error(
const int kind,
const char *format,
const T &node, Args &&...args) {
88 error(kind, format, &node, std::forward<Args>(args)...);
96template <
class T,
typename = std::enable_if_t<Util::has_SourceInfo_v<T>>,
class... Args>
97void error(
const char *format,
const T *node, Args &&...args) {
98 error(ErrorType::LEGACY_ERROR, format, node, std::forward<Args>(args)...);
103template <
class T,
typename = std::enable_if_t<Util::has_SourceInfo_v<T> && !std::is_po
inter_v<T>>,
105void error(
const char *format,
const T &node, Args &&...args) {
106 error(ErrorType::LEGACY_ERROR, format, node, std::forward<Args>(args)...);
112template <
typename... Args>
113void error(
const int kind,
const char *format, Args &&...args) {
115 auto action = context.getDefaultErrorDiagnosticAction();
116 context.errorReporter().diagnose(action, kind, format,
"", std::forward<Args>(args)...);
120#define ERROR_CHECK(e, ...) \
122 if (!(e)) ::P4::error(__VA_ARGS__); \
127template <
typename... Args>
128inline void warning(
const char *format, Args &&...args) {
130 auto action = context.getDefaultWarningDiagnosticAction();
131 context.errorReporter().diagnose(action,
nullptr, format,
"", std::forward<Args>(args)...);
136template <
class T,
typename = std::enable_if_t<Util::has_SourceInfo_v<T>>,
class... Args>
137void warning(
const int kind,
const char *format,
const T *node, Args &&...args) {
139 auto action = context.getDefaultWarningDiagnosticAction();
140 context.errorReporter().diagnose(action, kind, format,
"", node, std::forward<Args>(args)...);
144template <
class T,
typename = std::enable_if_t<Util::has_SourceInfo_v<T> && !std::is_po
inter_v<T>>,
146void warning(
const int kind,
const char *format,
const T &node, Args &&...args) {
147 ::P4::warning(kind, format, &node, std::forward<Args>(args)...);
152template <
typename... Args>
153void warning(
const int kind,
const char *format, Args &&...args) {
155 auto action = context.getDefaultWarningDiagnosticAction();
156 context.errorReporter().diagnose(action, kind, format,
"", std::forward<Args>(args)...);
160#define WARN_CHECK(e, ...) \
162 if (!(e)) ::P4::warning(__VA_ARGS__); \
166template <
class T,
typename = std::enable_if_t<Util::has_SourceInfo_v<T>>,
class... Args>
167void info(
const int kind,
const char *format,
const T *node, Args &&...args) {
169 auto action = context.getDefaultInfoDiagnosticAction();
170 context.errorReporter().diagnose(action, kind, format,
"", node, std::forward<Args>(args)...);
174template <
class T,
typename = std::enable_if_t<Util::has_SourceInfo_v<T> && !std::is_po
inter_v<T>>,
176void info(
const int kind,
const char *format,
const T &node, Args &&...args) {
177 ::P4::info(kind, format, &node, std::forward<Args>(args)...);
182template <
typename... Args>
183void info(
const int kind,
const char *format, Args &&...args) {
185 auto action = context.getDefaultInfoDiagnosticAction();
186 context.errorReporter().diagnose(action, kind, format,
"", std::forward<Args>(args)...);
virtual ErrorReporter & errorReporter()
Definition compile_context.cpp:65
static BaseCompileContext & get()
Definition compile_context.cpp:61
unsigned getDiagnosticCount() const
Definition error_reporter.h:187
TODO: this is not really specific to BMV2, it should reside somewhere else.
Definition applyOptionsPragmas.cpp:24
void warning(const char *format, Args &&...args)
Report a warning with the given message.
Definition lib/error.h:128
unsigned infoCount()
Definition lib/error.h:42
unsigned diagnosticCount()
Definition lib/error.h:46
unsigned warningCount()
Definition lib/error.h:37
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:76
void error(const char *format, Args &&...args)
Report an error with the given message.
Definition lib/error.h:58
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:167
unsigned errorCount()
Definition lib/error.h:34