iverilog/vvp
Aiden Grossman ca2a8fe953 Fix undefined behavior in schedule.cc operator delete
Schedule.cc currently makes use of a custom slab allocator by having
some structs specify a custom operator new/operator delete that call
into the slab allocator. However, this setup currently relies on C++ UB,
namely that writes that happen in operator delete are persisted
afterwards. The slab allocator inside the free_slab function uses the
memory of the object being freed to store allocator metadata, which is
not allowed given the rules around operator delete.

This patch changes the internal storage of slab_allocator to a struct
rather than a union so we can only return the actual storage when
allocating an object and there is a header for each object that the
allocator can use for metadata without writes to it being UB.
2026-03-23 07:24:41 -07:00
..
examples Update vvp examples to match the correct version 2026-03-02 10:48:10 -08:00
Makefile.in Fix manual PDF generation 2026-02-08 23:07:56 -08:00
arith.cc More cppcheck cleanup 2026-01-05 18:59:08 -08:00
arith.h cppcheck updates 2025-11-23 01:31:14 -08:00
array.cc More cppcheck cleanup 2026-01-19 19:50:10 -08:00
array.h vvp: Remove unused `compile_varw_real()` 2022-06-20 22:59:12 +02:00
array_common.cc cppcheck updates 2025-11-23 01:31:14 -08:00
array_common.h More cppcheck cleanup 2026-01-05 18:59:08 -08:00
bufif.cc Add support for passing a real input to logic, mos and if gates 2025-06-21 10:04:12 -07:00
bufif.h Minor cppcheck updates in vvp and switch vvp to use override for virtual functions 2025-07-21 23:32:34 -07:00
class_type.cc More cppcheck cleanup 2026-01-19 19:50:10 -08:00
class_type.h cppcheck updates 2025-11-23 01:31:14 -08:00
codes.cc Fix valgrind compile 2016-02-03 22:25:57 -08:00
codes.h vvp: Remove unused function prototypes 2022-06-20 22:52:56 +02:00
compile.cc Add more const declarations 2026-02-19 23:40:34 -08:00
compile.h More cppcheck cleanup 2026-01-05 18:59:08 -08:00
concat.cc vvp: concat: Defer update to end of the current simulation cycle 2024-01-20 10:32:55 -08:00
concat.h cppcheck updates 2025-11-23 01:31:14 -08:00
config.h.in Switch to std::round() and a common routine for real to uint64_t 2025-12-16 19:52:36 -08:00
cppcheck.sup Cleanup cppcheck 2026-02-24 23:53:57 -08:00
delay.cc Remove memory leak when multi-bit module path delays fail 2026-01-21 20:50:32 -08:00
delay.h Cleanup vhdl and most of vvp cppcheck issues 2026-01-19 22:54:45 -08:00
dff.cc cppcheck updates 2025-11-23 01:31:14 -08:00
dff.h cppcheck updates 2025-11-23 01:31:14 -08:00
draw_tt.c Fix some cppcheck warnings 2015-10-02 09:43:54 -07:00
enum_type.cc cppcheck updates 2025-11-23 01:31:14 -08:00
enum_type.h Update header files to use a more standard name to prevent rereading 2014-07-23 13:42:56 -07:00
event.cc More cppcheck updates 2025-10-20 23:54:15 -07:00
event.h cppcheck updates 2025-11-23 01:31:14 -08:00
extend.cc vvp: Remove `wid` parameter from `recv_vec{4,8}_pv()` 2022-05-28 15:34:02 +02:00
file_line.cc cppcheck updates 2025-11-23 01:31:14 -08:00
island_tran.cc cppcheck updates 2025-11-23 01:31:14 -08:00
latch.cc vvp: Remove `wid` parameter from `recv_vec{4,8}_pv()` 2022-05-28 15:34:02 +02:00
latch.h cppcheck updates 2025-11-23 01:31:14 -08:00
lexor.lex More cppcheck cleanup 2026-01-05 18:59:08 -08:00
lib_main.cc pthread_exit() is no longer needed and fixes vvp return 2026-02-06 01:55:36 -08:00
libvvp.h Add vvp "quiet" flag (issue #1193) 2024-12-31 13:05:36 +00:00
logic.cc Add support for passing a real input to logic, mos and if gates 2025-06-21 10:04:12 -07:00
logic.h cppcheck updates 2025-11-23 01:31:14 -08:00
main.cc Update program copyright to 2026 2026-01-13 02:04:37 -08:00
npmos.cc Add support for passing a real input to logic, mos and if gates 2025-06-21 10:04:12 -07:00
npmos.h Minor cppcheck updates in vvp and switch vvp to use override for virtual functions 2025-07-21 23:32:34 -07:00
parse.y cppcheck updates 2025-11-23 01:31:14 -08:00
parse_misc.cc cppcheck updates 2025-11-23 01:31:14 -08:00
parse_misc.h Update header files to use a more standard name to prevent rereading 2014-07-23 13:42:56 -07:00
part.cc cppcheck updates 2025-11-23 01:31:14 -08:00
part.h cppcheck updates 2025-11-23 01:31:14 -08:00
permaheap.cc updated FSF-address 2012-08-29 10:12:10 -07:00
permaheap.h Update header files to use a more standard name to prevent rereading 2014-07-23 13:42:56 -07:00
reduce.cc cppcheck updates 2025-11-23 01:31:14 -08:00
resolv.cc vvp: Remove `wid` parameter from `recv_vec{4,8}_pv()` 2022-05-28 15:34:02 +02:00
resolv.h cppcheck updates 2025-11-23 01:31:14 -08:00
schedule.cc Move all simulation callback decls to the header 2026-02-06 09:48:41 -08:00
schedule.h Move all simulation callback decls to the header 2026-02-06 09:48:41 -08:00
sfunc.cc fix broken call-out of real-valued system functions. 2014-01-21 13:31:49 -08:00
sfunc.h cppcheck updates 2025-11-23 01:31:14 -08:00
slab.h Fix undefined behavior in schedule.cc operator delete 2026-03-23 07:24:41 -07:00
statistics.cc updated FSF-address 2012-08-29 10:12:10 -07:00
statistics.h Update header files to use a more standard name to prevent rereading 2014-07-23 13:42:56 -07:00
stop.cc cppcheck updates 2025-11-23 01:31:14 -08:00
substitute.cc cppcheck updates 2025-11-23 01:31:14 -08:00
symbols.cc Fix initialisation of vvp symbol table values. 2019-08-01 12:34:47 +01:00
symbols.h More cppcheck cleanup 2026-01-19 19:50:10 -08:00
udp.cc Cleanup vhdl and most of vvp cppcheck issues 2026-01-19 22:54:45 -08:00
udp.h cppcheck updates 2025-11-23 01:31:14 -08:00
ufunc.cc cppcheck updates 2025-11-23 01:31:14 -08:00
ufunc.h cppcheck updates 2025-11-23 01:31:14 -08:00
vpi_bit.cc More cppcheck updates 2025-10-20 23:54:15 -07:00
vpi_callback.cc More cppcheck cleanup 2026-01-05 18:59:08 -08:00
vpi_cobject.cc More cppcheck updates 2025-10-20 23:54:15 -07:00
vpi_const.cc Fix compile warning when long and int have the same width 2026-01-05 20:50:35 -08:00
vpi_darray.cc Fix the valgrind cleanup of automatic array vars 2026-02-06 21:35:13 -08:00
vpi_event.cc Implement vpi_put_value() for named events (GitHub issue #158). 2017-06-15 08:47:29 +01:00
vpi_iter.cc Fix new/free mismatch in vvp. 2012-08-30 19:33:25 -07:00
vpi_mcd.cc More cppcheck updates 2025-10-20 23:54:15 -07:00
vpi_modules.cc Add correct C++ cast for the vpi_modules 2025-10-21 00:44:23 -07:00
vpi_priv.cc Fix sdf_interconnect4 failure and reenable 2026-02-24 22:24:17 -08:00
vpi_priv.h Add basic support for vpi_get64() to return the nexus pointer 2026-01-25 17:50:06 -08:00
vpi_real.cc More cppcheck updates 2025-10-20 23:54:15 -07:00
vpi_scope.cc Fix the valgrind cleanup of automatic array vars 2026-02-06 21:35:13 -08:00
vpi_signal.cc Add basic support for vpi_get64() to return the nexus pointer 2026-01-25 17:50:06 -08:00
vpi_string.cc More cppcheck updates 2025-10-20 23:54:15 -07:00
vpi_tasks.cc cppcheck updates 2025-11-23 01:31:14 -08:00
vpi_time.cc More cppcheck updates 2025-10-20 23:54:15 -07:00
vpi_vthr_vector.cc Cleanup vhdl and most of vvp cppcheck issues 2026-01-19 22:54:45 -08:00
vpip_bin.cc Fix implicit fallthrough warnings when building with recent GCC. 2018-10-06 20:15:42 +01:00
vpip_format.cc updated FSF-address 2012-08-29 10:12:10 -07:00
vpip_hex.cc Fix implicit fallthrough warnings when building with recent GCC. 2018-10-06 20:15:42 +01:00
vpip_oct.cc Fix implicit fallthrough warnings when building with recent GCC. 2018-10-06 20:15:42 +01:00
vpip_to_dec.cc More cppcheck updates 2025-10-20 23:54:15 -07:00
vthread.cc More cppcheck cleanup 2026-01-05 18:59:08 -08:00
vthread.h vvp: Handle %fork in `final` procedures 2023-04-16 09:20:31 -07:00
vvp.def Add missing declaration for vpi_get64 to vvp.def 2026-01-25 18:00:55 -08:00
vvp.man.in Update program copyright to 2026 2026-01-13 02:04:37 -08:00
vvp_cleanup.h Fix the valgrind cleanup of automatic array vars 2026-02-06 21:35:13 -08:00
vvp_cobject.cc Allow class properties to be arrayed. 2014-09-15 17:37:30 -07:00
vvp_cobject.h cppcheck updates 2025-11-23 01:31:14 -08:00
vvp_darray.cc cppcheck updates 2025-11-23 01:31:14 -08:00
vvp_darray.h cppcheck updates 2025-11-23 01:31:14 -08:00
vvp_island.cc cppcheck updates 2025-11-23 01:31:14 -08:00
vvp_island.h Another const declaration that can be added 2026-02-19 23:40:42 -08:00
vvp_net.cc New cppcheck cleanup 2026-02-06 15:06:28 -08:00
vvp_net.h More cppcheck cleanup 2026-01-19 19:50:10 -08:00
vvp_net_sig.cc More cppcheck updates 2025-10-20 23:54:15 -07:00
vvp_net_sig.h More cppcheck cleanup 2026-01-19 19:50:10 -08:00
vvp_object.cc Fix dynamic array assignment to make a copy of the rvalue. 2020-11-26 12:52:06 -08:00
vvp_object.h Fix dynamic array assignment to make a copy of the rvalue. 2020-11-26 12:52:06 -08:00
vvp_vpi.cc Remove malloc.h support and for C++ files use <c...> include files. 2010-06-01 08:56:30 -07:00
vvp_vpi_callback.h Fix for br1019 - allow multiple array words to be attached to a vpi callback. 2017-08-12 12:23:43 +01:00
words.cc More cppcheck updates 2025-10-20 23:54:15 -07:00