Есть ли способ применить предположения, сделанные моделью памяти WP?
Рассмотрим следующие две функции, которые необходимо проверить с помощью Frama-C:
/*@ requires \valid(a) && \valid(b);
@ ensures A: *a == 1;
@ ensures B: *b == 2;
@ assigns *a, *b;
@*/
void assign_many(int *a, int *b)
{
*a = 1;
*b = 2;
}
int main() {
int a = 42;
assign_many(&a, &a);
//@ assert a == 1;
//@ assert a == 2;
return 0;
}
Функция assign_many
не может проверить в общем случае, так как два аргумента могут иметь псевдоним (как показано в main
).Однако, если вы выберете модель памяти Hoare+ref
, эта функция проверяет, так как она предполагает разделение.Но я все еще могу проверить main
, даже используя модель памяти Typed
.С параметром командной строки -wp-warn-memory-model
сообщение предупреждает вас о том, какие предположения требуются для модели памяти.Можно ли применить эти предположения, например, добавить их в качестве предварительных условий к assign_many
?