mirror of
https://github.com/YosysHQ/yosys
synced 2025-06-06 06:03:23 +00:00
kernel/rtlil: Fixed the destruction guard for IdString
The guard is optimised out on some compilers under certain conditions (eg: LTO on GCC) as constant under C++ lifetime rules. This is because the guard type's member is invalid to access (UB) after the type has been destroyed, resulting in `destruct_guard.ok` being unable to be `false` according to the optimiser, based on the lifetime rules. This patch still invokes UB (all accesses to the destroyed IdString instance are), but at least the optimiser can't reason that destruct_guard_ok cannot be false and therefore it's safe to optimise out from its guard role.
This commit is contained in:
parent
b04d0e09e8
commit
b59c717245
2 changed files with 6 additions and 5 deletions
|
@ -30,6 +30,7 @@
|
|||
|
||||
YOSYS_NAMESPACE_BEGIN
|
||||
|
||||
bool RTLIL::IdString::destruct_guard_ok = false;
|
||||
RTLIL::IdString::destruct_guard_t RTLIL::IdString::destruct_guard;
|
||||
std::vector<char*> RTLIL::IdString::global_id_storage_;
|
||||
dict<char*, int, hash_cstr_ops> RTLIL::IdString::global_id_index_;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue