2017-02-09 33 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)]但是這是一個聰明的更脆弱鏈接器可以實現該功能從未被調用。使外部符號可用,強制鏈接器的手保持它。