【发布时间】:2019-03-13 01:50:25
【问题描述】:
有没有办法强制执行 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?
【问题讨论】:
标签: frama-c