Il processore tenta di eseguire un'istruzione assembly non supportata dal silicio (es. istruzioni AVX-512 su CPU legacy) o causata dalla corruzione dello stack che fa saltare l'instruction pointer su dati non eseguibili.
SIGILL_ILLEGAL_INSTRUCTION
→
In C la variabile globale 'errno' non viene mai azzerata dalle chiamate di successo della libreria; controllare 'if (errno != 0)' senza aver prima verificato che la funzione abbia restituito un valore di errore (es. -1 o NULL) porta a segnalare falsi errori residui di chiamate precedenti.
STALE_ERRNO_VALUE
→
Le stringhe letterali tra virgolette sono memorizzate nella sezione di memoria '.rodata' (sola lettura); tentare di modificarne un carattere tramite un puntatore genera una violazione di accesso immediata.
STRING_LITERAL_MODIFY
→
A differenza degli interi unsigned che hanno wrap-around garantito per modulo, l'overflow di interi signed ('INT_MAX + 1') è comportamento indefinito: il compilatore può assumere che non accada mai ed eliminare i successivi controlli di validità 'if (x + 1 > x)'.
SIGNED_INTEGER_OVERFLOW
→
Invocare 'pthread_mutex_destroy(&mtx)' mentre il mutex è attualmente acquisito da un thread o mentre vi sono thread in attesa viola le specifiche POSIX e restituisce il codice di errore EBUSY.
PTHREAD_MUTEX_DESTROY_LOCKED
→
L'esaurimento della memoria dello stack per chiamate ricorsive illimitate o allocazione di array a dimensione variabile enormi (VLA o alloca) supera il page guard generando un crash SIGSEGV.
STACK_OVERFLOW_C
→
Si verifica quando si memorizza l'indirizzo di una variabile dichiarata all'interno di un blocco interno '{ int temp = 5; ptr = &temp; }' e lo si dereferenzia all'esterno del blocco una volta che la memoria dello stack è stata riutilizzata.
USE_AFTER_SCOPE
→