Frama-C - это расширяемая среда анализа для C (только) с плагином для обнаружения неопределенного поведения.
Давайте попробуем это на вашем примере:
main(){
for (int i = 0; i < 64; i++)
{
long long n64 = (1 << i);
}
}
Этот плагин изначально не предназначен для случайного поиска ошибок, поэтому вам придется извинить плохой интерфейс и довольно строгие условия использования:
$ frama-c -val t.c
...
t.c:4:[kernel] warning: invalid shift: assert i ≥ 0 ∧ i < 32;
Условие i ≥ 0 ∧ i < 32
выражает условие, которое должно быть истинным в строке 4 для определения сдвига. Как вы можете сделать вывод, как только проблема была указана вам, 1
имеет тип int
, и для этой архитектуры не определено смещение его более чем на 32
.
Это предупреждение вы хотели увидеть?
Опять же, Frama-C предназначена только для C, поэтому вы можете воспользоваться ею только в том случае, если части проекта, которые вы хотите исследовать, находятся в C.