| #ifndef VPR_ERROR_H |
| #define VPR_ERROR_H |
| |
| #include "vtr_error.h" |
| #include <cstdarg> |
| |
| enum e_vpr_error { |
| VPR_ERROR_UNKNOWN = 0, |
| VPR_ERROR_ARCH, |
| VPR_ERROR_PACK, |
| VPR_ERROR_PLACE, |
| VPR_ERROR_ROUTE, |
| VPR_ERROR_TIMING, |
| VPR_ERROR_POWER, |
| VPR_ERROR_SDC, |
| VPR_ERROR_NET_F, |
| VPR_ERROR_PLACE_F, |
| VPR_ERROR_BLIF_F, |
| VPR_ERROR_IMPL_NETLIST_WRITER, |
| VPR_ERROR_NETLIST, |
| VPR_ERROR_ATOM_NETLIST, |
| VPR_ERROR_CLB_NETLIST, |
| VPR_ERROR_ANALYSIS, |
| VPR_ERROR_INTERRUPTED, |
| VPR_ERROR_DRAW, |
| VPR_ERROR_OTHER |
| }; |
| typedef enum e_vpr_error t_vpr_error_type; |
| |
| /* This structure is thrown back to highest level of VPR flow if an * |
| * internal VPR or user input error occurs. */ |
| |
| class VprError : public vtr::VtrError { |
| public: |
| VprError(t_vpr_error_type err_type, |
| std::string msg="", |
| std::string file="", |
| size_t linenum=-1) |
| : VtrError(msg, file, linenum) |
| , type_(err_type) {} |
| |
| t_vpr_error_type type() const { return type_; } |
| |
| private: |
| t_vpr_error_type type_; |
| }; |
| |
| //VPR error reporting routines |
| // |
| //Note that we mark these functions with the C++11 attribute 'noreturn' |
| //as they will throw exceptions and not return normally. This can help |
| //reduce false-positive compiler warnings |
| [[noreturn]] void vpr_throw(enum e_vpr_error type, const char* psz_file_name, unsigned int line_num, const char* psz_message, ...); |
| [[noreturn]] void vvpr_throw(enum e_vpr_error type, const char* psz_file_name, unsigned int line_num, const char* psz_message, va_list args); |
| |
| /* |
| * Macro wrapper around vpr_throw() which automatically |
| * specifies file and line number of call site. |
| */ |
| #define VPR_THROW(type, ...) do { \ |
| vpr_throw(type, __FILE__, __LINE__, __VA_ARGS__); \ |
| } while(false) |
| |
| #endif |