Как написать спецификацию разделения глобальной переменной, используя проверяемый c

Ниже приведен пример кода на языке C.

unsigned int  COUNTER;
unsigned int  get_counter(void) {
    COUNTER ++;
    return COUNTER;
}

Я написал основную спецификацию с использованием поддающегося проверке c (vst), но в конце проверки я сталкиваюсь с ошибкой "typecheck_error (deref_byvalue tint)". Может ли какой-нибудь орган сказать мне, как написать правильную спецификацию основания вышеупомянутого основания? Дело в том, как написать SEP() глобальной переменной.

(вот неправильный, пожалуйста, поправьте меня)

Definition get_counter_spec :=
 DECLARE _get_counter
  WITH v : Z, counter:val
  PRE []
        PROP  () 
        LOCAL (gvar _COUNTER counter)
        SEP   (data_at Ews tint (Vint (Int.repr v)) counter)
  POST [ tint ]
        PROP () 
        LOCAL(temp ret_temp (Vint (Int.repr (v+1))))
        SEP   (data_at Ews tint (Vint (Int.repr (v+1))) counter).

1 ответ

Ваша ошибка: в C-программе COUNTER объявлен как "unsigned int", но в вашем get_counter_spec вы используете "tint" вместо "tuint". С этим изменением доказательство проходит сразу же: функция запуска; сделать 4 вперед.

Наша ошибка: полученное вами сообщение об ошибке (в VST 2.0) совершенно бесполезно! Я добавлю отчет о проблеме, чтобы улучшить отчетность об ошибках в этом случае.

Другие вопросы по тегам