【问题标题】:Is the clang serialized AST portable?clang 序列化 AST 是否可移植?
【发布时间】:2020-09-09 12:30:44
【问题描述】:

我正在使用 python 绑定来遍历 clang AST... 当我遇到错误时,我想将 AST 转储到一个文件中,以便以后从该文件中加载它并调试 walker。

如果我转储然后使用 TranslationUnit.save() 和 Index.read() 绑定加载,这工作正常,但是如果我在平台 Linux -> Windows 或 Windows -> Linux 之间移动 AST 文件,这将不起作用.

这是预期的吗? 有没有办法让 AST 文件“可移植”?

【问题讨论】:

  • 你对比过Linux和Windows生成的AST文件吗?

标签: clang abstract-syntax-tree


【解决方案1】:

如果您有一些模板 C++ 代码被 MSVC 接受,但通常被 Clang 诊断为无效,则不是“可移植的”。

来自Clang Documentation

第三,MSVC 接受 Clang 通常会诊断为无效的一些 C++ 代码。当这些结构出现在广泛包含的系统头文件中时,Clang 会尝试恢复并继续编译用户的程序。大多数解析和语义兼容性调整由 -fms-compatibility 和 -fdelayed-template-parsing 控制,并且正在进行中。

比较您保存的 AST 文件以检查它们是否具有相同的节点(原始指针地址可能不同)。如果没有,则使用提到的标志-fms-compatibility-fdelayed-template-parsing 进行修复。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-24
    • 1970-01-01
    • 2017-03-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多