【问题标题】:Coq VST Internal structure copyingCoq VST 内部结构复制
【发布时间】:2020-03-16 16:59:09
【问题描述】:

Coq 8.10.1 的 VST(已验证软件工具链)2.5v 库遇到问题:

VST 的最新工作提交出现错误,即“不支持内部结构复制”。 最小的例子:

struct foo {unsigned int a;};
struct foo f() {
struct foo q;
return q; }

在开始证明时出错:

错误:策略失败:表达式 (_q)%expr 包含内部结构复制,这是可验证的 C(级别 97)当前不支持的 C 功能。

这是由于 floyd/forward.v 中的check_normalized

Fixpoint check_norm_expr (e: expr) : diagnose_expr :=
match e with
| Evar _ ty => diagnose_this_expr (access_mode ty) e
...

所以,问题是:

1) 存在哪些建议的解决方法?

2) 这种限制的原因是什么?

3) 我在哪里可以获得不受支持的功能列表?

【问题讨论】:

    标签: c coq formal-verification verifiable-c


    【解决方案1】:

    1) 解决方法是将您的 C 程序更改为逐个字段复制。

    2) 原因是 C 的结构复制非常复杂且依赖于目标 ISA 的实现/语义,尤其是在参数传递和函数返回方面。

    3) reference manual 的第 4 章(“可验证的 C 和 clightgen”)的前 10 行有一个不支持的功能的简短列表,但不幸的是 struct-by-copy 不在该列表中。这是一个错误。

    【讨论】:

    • 感谢您的回复。如果我们有大量的 C 代码更改,这可能是不切实际的。这是许多现有代码中使用的 C 语言的一个非常基本的特性。如果有其他解决方法?也许结构复制可以被承认或被证明有一些限制(例如,只有具有原始类型的结构)?
    猜你喜欢
    • 1970-01-01
    • 2012-12-12
    • 2021-07-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-17
    相关资源
    最近更新 更多