2017-02-09 15 views
4

我试图分析由rustc前端发出的LLVM-IR。该计划是针对特定语言元素发布IR。是否有这样的元素和IR代码模板映射或列表的列表?,以防止有发出LLVM IR从删除未使用的功能的方法吗?

编译器具有足够的智能以移除发射的IR中的未使用函数,除非使用println!将某些内容印在控制台上,否则编译器将删除所使用的每个函数。

这不起作用,说x没有使用任何地方或当x被覆盖。

let x = function(); 

Rust中是否存在某种限定符,使发射的IR保留所有功能?

+0

我找到了映射列表[here](https://f0rki.gitbooks.io/mapping-high-level-constructs-to-llvm-ir/content/) – Bharadwaj

+0

请注意,此列表并非特定于Rust,并且不能保证rustc会实际遵循它。 –

+0

哦,感谢您的链接;对于初出茅庐的编译器编写者来说非常有用的资源! –

回答

4

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

rustc代码。

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

Rust的ABI并不稳定,因为Rust开发人员希望在出现更好的表现方式时保留更改这些类型的东西的能力。

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

是否有某种预选赛的锈,使发出的红外保留了所有的功能呢?

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

  • 编译为库和标记功能pub

它也可以使用#[inline(never)]但是这是一个聪明的更脆弱链接器可以实现该功能从未被调用。使外部符号可用,强制链接器的手保持它。