slice - Frama-C 中的条件切片

标签 slice frama-c

我的最后一个问题( Understanding Frama-C slicer results )是一个精确的例子,但正如我所说,我的目标是知道是否可以使用 Frama-C 进行一些条件切片(向前和向后)。可能吗?

更准确地说,我无法获得该程序的精确部分:

/*@ requires a >= b;

  @ assigns \nothing;

  @ ensures \result == a;
*/
int example4_instr1(int a, int b){
    int max = a;
    if(a < b)
        max = b;
    return max;
}

通过使用好的参数/选项,是否有可能在这种情况/一般情况下得到我想要的东西?

最佳答案

正如帕斯卡在他的 answer to your previous question 中提到的那样,Frama-C 的向后和向前切片基于称为值(value)分析的分析结果。这种分析是非关系性的;这意味着它只保留有关变量数值范围的信息,而不保留有关例如两个变量之间的差异。因此,它无法跟踪您的不平等a >= b 。这解释了为什么测试的两个分支 if (a < b)似乎已被关注。

如果没有来自用户的更多信息(但是,在本示例中,您可以编写的任何内容都无法帮助值(value)分析)或其他分析,则向后切片必须考虑 if可能会或可能不会被采取。不幸的是,这会导致程序中没有任何内容被删除。

关于slice - Frama-C 中的条件切片,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17653296/

相关文章:

frama-c - Frama-C EVA插件中 "after"列的含义和用途是什么

linux - frama-c:所有 VC 都失败

frama-c - 我如何分析像 open62541 这样的复杂项目?

python - 取决于前一个轴的索引的数组切片最大值

python - 使用部分索引元组列表对多索引数据帧进行切片的最佳方法是什么?

更改初始对象的值后 Javascript 对象引用中断

go - 迭代golang无缓冲 channel 时输出困惑

c - 检查数组是否按升序或降序排序的函数的 ACSL 证明

go - 结构中 slice 的初始化

c - 使用 Frama-C 进行值(value)依赖分析