Go to the source code of this file.
◆ Forall_goto_functions
| #define Forall_goto_functions |
( |
| it, |
|
|
| functions ) |
Value: for (goto_functionst::function_mapt::iterator it = \
(functions).function_map.begin(); \
it != (functions).function_map.end(); \
it++)
◆ forall_goto_functions
| #define forall_goto_functions |
( |
| it, |
|
|
| functions ) |
Value: for (goto_functionst::function_mapt::const_iterator it = \
(functions).function_map.begin(); \
it != (functions).function_map.end(); \
it++)
◆ get_local_identifiers()
◆ spawns_threads()
Whether the program can create a thread.
Every route – pthread_create, std::thread, a CUDA kernel launch, threading.Thread – lowers to the __ESBMC_spawn_thread intrinsic, so reaching it is the creation point. Reachability and not presence: pthread_lib.c is linked into every program. An indirect call needs no special case: symex resolves one through the value set into a list of concrete symbols (get_function_list in symex_function.cpp), so it can only reach a function whose address is taken somewhere – which is exactly what collect_taken_functions seeds the worklist with.