diff options
| author | Gary Guo <gary@garyguo.net> | 2022-04-02 22:29:59 +0100 |
|---|---|---|
| committer | Gary Guo <gary@garyguo.net> | 2022-04-18 20:50:56 +0100 |
| commit | a1dae4bc9d708bfea8a8bb5996e96de5c5180f7f (patch) | |
| tree | abae2f6cc83b815fc27e75a731b59d7ddc9838e8 | |
| parent | 49cc6d1f843749dab51aa71925f4afd4fad9c419 (diff) | |
Make `#[used]` considered reachable
| -rw-r--r-- | compiler/rustc_passes/src/reachable.rs | 5 |
1 files changed, 5 insertions, 0 deletions
diff --git a/compiler/rustc_passes/src/reachable.rs b/compiler/rustc_passes/src/reachable.rs index b520e5d04ea..b65e3342613 100644 --- a/compiler/rustc_passes/src/reachable.rs +++ b/compiler/rustc_passes/src/reachable.rs @@ -333,6 +333,11 @@ impl CollectPrivateImplItemsVisitor<'_, '_> { let codegen_attrs = self.tcx.codegen_fn_attrs(def_id); if codegen_attrs.contains_extern_indicator() || codegen_attrs.flags.contains(CodegenFnAttrFlags::RUSTC_STD_INTERNAL_SYMBOL) + // FIXME(nbdd0121): `#[used]` are marked as reachable here so it's picked up by + // `linked_symbols` in cg_ssa. They won't be exported in binary or cdylib due to their + // `SymbolExportLevel::Rust` export level but may end up being exported in dylibs. + || codegen_attrs.flags.contains(CodegenFnAttrFlags::USED) + || codegen_attrs.flags.contains(CodegenFnAttrFlags::USED_LINKER) { self.worklist.push(def_id); } |
