Я сталкиваюсь с некогерентным поведением с опцией -rte
в версии Magnesium (устанавливается непосредственно с ubuntu). Мне интересно, знает ли кто-нибудь об этой проблеме или что я делаю что-то неправильно.Бесшумное поведение с параметром -rte в магнии
У меня есть программа с неправильным доступом вне массива. При запуске frama-c-gui
без параметров и анализа значений обнаружен доступ к внешним границам, и соответствующая аннотация отображается с оранжевым кружком. При использовании опции -rte отображаются две аннотации (для нижней и верхней границ массива), а зеленый круг отображается для обоих (что неверно).
/*@ assert rte: index_bound: 0 ≤ cpt; */
/*@ assert rte: index_bound: cpt < 5; */
Консоль говорит:
tableau_erreur.c:11:[value] Assertion 'rte,index_bound' got status valid.
Я подозреваю, что существует несоответствие между двумя примечаниями, потому что они оба имеют один и тот же «имя»: index_bound
.
Кроме того, часть кода после того, как цикл, содержащий дефектный доступ, окрашен в красный цвет, что указывает на то, что анализ правильно определил, что он недоступен из-за ошибки раньше.
Вот моя программа:
int main(){
int t[5] = {1,2,3,4,5};
int cpt =0 ;
int tmp ;
while (cpt<10){
tmp = getchar() ;
if (t[cpt] > tmp)
{ return 1 ; }
cpt++ ;
}
return 10 ;
}
Вот захват моего экрана (с помощью frama-c-gui -rte tableau_erreur.c
).
Когда я не использую -rte
вариант результат является правильным (оранжевый круг):
Я посмотрел на баг трекере, но не нашли следов, что , Мне не удалось собрать последнюю версию Frama-C, чтобы проверить ее.
На боковой ноте всегда полезно знать, когда у пользователей возникли проблемы с установкой Frama-C. Это может быть проблема с OPAM или что-то еще, но кто-то из списка обсуждений в рамке-c-обсуждения ([email protected]) может помочь. – anol
Это действительно серьезная ошибка, которая будет исправлена как можно скорее. Спасибо, что нашли время сообщить об этом, здесь, на SO и на BTC Frama-C. Что касается вашего вопроса «я делаю что-то не так», ответ не _per se_, но необычно использовать Value и RTE вместе. (Вот почему эта ошибка была незамеченной так долго.) Из любопытства, есть ли у вас конкретная причина сделать это? – byako