mirror of
https://github.com/YosysHQ/yosys
synced 2025-06-06 14:13:23 +00:00
cxxrtl: use CXXRTL_ASSERT for RTL contract violations instead of assert.
RTL contract violations and C++ contract violations are different: the former depend on the netlist and will never violate memory safety whereas the latter may. When loading a CXXRTL simulation into another process, RTL contract violations should generally not crash it, while C++ contract violations should.
This commit is contained in:
parent
7b0cfd5c36
commit
aa0a15a42c
2 changed files with 16 additions and 2 deletions
|
@ -53,6 +53,20 @@
|
|||
#define CXXRTL_ALWAYS_INLINE inline
|
||||
#endif
|
||||
|
||||
// CXXRTL uses assert() to check for C++ contract violations (which may result in e.g. undefined behavior
|
||||
// of the simulation code itself), and CXXRTL_ASSERT to check for RTL contract violations (which may at
|
||||
// most result in undefined simulation results).
|
||||
//
|
||||
// Though by default, CXXRTL_ASSERT() expands to assert(), it may be overridden e.g. when integrating
|
||||
// the simulation into another process that should survive violating RTL contracts.
|
||||
#ifndef CXXRTL_ASSERT
|
||||
#ifndef CXXRTL_NDEBUG
|
||||
#define CXXRTL_ASSERT(x) assert(x)
|
||||
#else
|
||||
#define CXXRTL_ASSERT(x)
|
||||
#endif
|
||||
#endif
|
||||
|
||||
namespace cxxrtl {
|
||||
|
||||
// All arbitrary-width values in CXXRTL are backed by arrays of unsigned integers called chunks. The chunk size
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue