有没有办法防止发出的LLVM IR删除未使用的函数?

时间:2017-02-09 12:29:24

标签: rust llvm volatile llvm-ir

我正在尝试分析rustc前端发出的LLVM-IR。计划是为特定语言元素发出IR。是否有这样的元素列表和IR代码模板映射或列表?

编译器足够智能,可以删除发出的IR中未使用的函数,除非使用println!将某些内容打印到控制台,编译器将删除所有使用的函数。

这也不起作用,说x在任何地方都没有使用过,或者在x被覆盖时也是如此。

let x = function();

Rust中是否有某种限定符,以便发出的IR保留所有功能?

1 个答案:

答案 0 :(得分:4)

  

是否有这样的元素列表和IR代码模板映射或列表?

rustc代码。

脸颊似乎有点舌头,但它实际上是唯一可用的答案。

Rust的ABI特别不稳定,因为Rust开发人员希望在出现更好的表现方式时保留更改这类内容的能力。

这适用于结构的内存表示,调用约定等......

  

Rust中是否有某种限定符,以便发出的IR保留所有功能?

保留功能的最简单方法是:

  • 编译为库并标记函数pub

也可以使用#[inline(never)],但这更脆弱,因为智能链接器可以实现永远不会调用该函数。使符号在外部可用会强制链接者的手保留它。