Uh oh!
There was an error while loading. Please reload this page.
interpret #[used] as #[used(compiler)] on illumos - #147117
Conversation
rustbot
commented
Sep 28, 2025
Some changes occurred in compiler/rustc_attr_parsing Some changes occurred in compiler/rustc_codegen_ssa Some changes occurred in compiler/rustc_hir/src/attrs |
rustbot
commented
Sep 28, 2025
|
workingjubilee
commented
Sep 28, 2025
Hm. Isn't |
iximeow
commented
Sep 28, 2025
i didn't think we can get at the target OS while parsing |
workingjubilee
commented
Sep 28, 2025
Wouldn't it be simpler to only change codegen_attrs.rs? |
iximeow
commented
Sep 28, 2025
in a "lines changed" sense, yes, i suppose? as a very infrequent contributor and a basically-never-touched-parsing contributor, i primarily want to make a change that is not surprising to regular contributors. if you're saying that this is surprising, and you would expect codegen_attrs.rs to care about the target OS (and presumably it'd be available under |
workingjubilee
commented
Sep 28, 2025
sorry, I meant in cg_ssa specifically. adding a variant during option parsing to bypass broken behavior on a target where the behavior for one of the variants is already broken and will remain broken is what puzzles me. |
by cg_ssa we can't distinguish between the source having been so that's how i ended up agreeing with bjorn3 on a third variant here. and separately i figure i'll add a warning if (relatedly, i'm not totally sure that |
This comment has been minimized.
This comment has been minimized.
iximeow
commented
Sep 28, 2025
hm. i'd missed that moving from passing to failing among the other failures on illumos, i suppose i should have run |
jdonszelmann
commented
Sep 28, 2025
This seems like the right solution to me (having written most attribute parsers, but not this one specifically. Did review it at the time). Parsing it to a form that's target agnostic but let's you still decode which form it was (Any) and then choosing what to do with it in SSA. r=me for the attribute parsing stuff if you need my blessing nora |
Uh oh!
There was an error while loading. Please reload this page.
workingjubilee
commented
Sep 28, 2025
Yes, it's mostly a matter of taste then. If people prefer this route then that's fine, as it does reflect the source most closely during parsing before it reaches codegen. |
illumos' `ld` does not support a flag like either SHF_GNU_RETAIN or SHF_SUNW_NODISCARD, so there is no way to communicate `#[used(linker)]` for that target. Setting `USED_LINKER` to try results in LLVM setting SHF_SUNW_NODISCARD for Solaris-like targets, which is an unknown section header flag for illumos `ld` and prevents sections from being merged that otherwise would. As a motivating example, the `inventory` crate produces `#[used]` items to merge into `.init_array`. Because those items have an unknown section header flag they are not merged with the default `.init_array` with `frame_dummy`, and end up never executed. Downgrading `#[used]` to `#[used(compiler)]` on illumos keeps so-attributed items as preserved as they had been before rust-lang#140872. As was the case before that change, because rustc passes `-z ignore` to illumos `ld`, it's possible that `used` sections are GC'd at link time. rust-lang#146169 describes this unfortunate circumstance.
6451592 to
c721fa2Compareiximeow
commented
Oct 3, 2025
i went ahead and squashed all three since it feels like there's no use for the intermediate handles-warnings-bad state. thanks for the reviews 🙏 |
Noratrieb
commented
Oct 4, 2025
Makes sense, thanks! |
bors
commented
Oct 4, 2025
…oratrieb interpret `#[used]` as `#[used(compiler)]` on illumos helps rust-lang#146169 not be as painful: fixes the illumos regression in rust-lang#140872, but `#[used(linker)]` is still erroneous on illumos generally. illumos' `ld` does not support a flag like either SHF_GNU_RETAIN or SHF_SUNW_NODISCARD, so there is no way to communicate `#[used(linker)]` for that target. Setting `USED_LINKER` to try results in LLVM setting SHF_SUNW_NODISCARD for Solaris-like targets, which is an unknown section header flag for illumos `ld` and prevents sections from being merged that otherwise would. As a motivating example, the `inventory` crate produces `#[used]` items to merge into `.init_array`. Because those items have an unknown section header flag they are not merged with the default `.init_array` with `frame_dummy`, and end up never executed. Downgrading `#[used]` to `#[used(compiler)]` on illumos keeps so-attributed items as preserved as they had been before rust-lang#140872. As was the case before that change, because rustc passes `-z ignore` to illumos `ld`, it's possible that `used` sections are GC'd at link time. rust-lang#146169 describes this unfortunate circumstance. ---- as it turns out, `tests/ui/attributes/used_with_archive.rs` had broken on `x86_64-unknown-illumos`, and this patch fixes it. the trials and tribulations of tier 2 :( r? `@Noratrieb` probably?
Rollup of 14 pull requests Successful merges: - #142670 (Document fully-qualified syntax in `as`' keyword doc) - #145685 (add CloneFromCell and Cell::get_cloned) - #146330 (Bump unicode_data and printables to version 17.0.0) - #146451 (Fix atan2 inaccuracy in documentation) - #146479 (add mem::conjure_zst) - #146874 (compiler: Hint at multiple crate versions if trait impl is for wrong ADT ) - #147117 (interpret `#[used]` as `#[used(compiler)]` on illumos) - #147190 (std: `sys::net` cleanups) - #147251 (Do not assert that a change in global cache only happens when concurrent) - #147280 (Return to needs-llvm-components being info-only) - #147288 (compiletest: Make `DirectiveLine` responsible for name/value splitting) - #147309 (Add documentation about unwinding to wasm targets) - #147315 (bless autodiff batching test) - #147323 (Fix top level ui tests check in tidy) r? `@ghost` `@rustbot` modify labels: rollup
…oratrieb interpret `#[used]` as `#[used(compiler)]` on illumos helps rust-lang#146169 not be as painful: fixes the illumos regression in rust-lang#140872, but `#[used(linker)]` is still erroneous on illumos generally. illumos' `ld` does not support a flag like either SHF_GNU_RETAIN or SHF_SUNW_NODISCARD, so there is no way to communicate `#[used(linker)]` for that target. Setting `USED_LINKER` to try results in LLVM setting SHF_SUNW_NODISCARD for Solaris-like targets, which is an unknown section header flag for illumos `ld` and prevents sections from being merged that otherwise would. As a motivating example, the `inventory` crate produces `#[used]` items to merge into `.init_array`. Because those items have an unknown section header flag they are not merged with the default `.init_array` with `frame_dummy`, and end up never executed. Downgrading `#[used]` to `#[used(compiler)]` on illumos keeps so-attributed items as preserved as they had been before rust-lang#140872. As was the case before that change, because rustc passes `-z ignore` to illumos `ld`, it's possible that `used` sections are GC'd at link time. rust-lang#146169 describes this unfortunate circumstance. ---- as it turns out, `tests/ui/attributes/used_with_archive.rs` had broken on `x86_64-unknown-illumos`, and this patch fixes it. the trials and tribulations of tier 2 :( r? ``@Noratrieb`` probably?
Rollup of 11 pull requests Successful merges: - #142670 (Document fully-qualified syntax in `as`' keyword doc) - #145685 (add CloneFromCell and Cell::get_cloned) - #146330 (Bump unicode_data and printables to version 17.0.0) - #146451 (Fix atan2 inaccuracy in documentation) - #146479 (add mem::conjure_zst) - #147117 (interpret `#[used]` as `#[used(compiler)]` on illumos) - #147190 (std: `sys::net` cleanups) - #147251 (Do not assert that a change in global cache only happens when concurrent) - #147280 (Return to needs-llvm-components being info-only) - #147288 (compiletest: Make `DirectiveLine` responsible for name/value splitting) - #147315 (bless autodiff batching test) r? `@ghost` `@rustbot` modify labels: rollup
…oratrieb interpret `#[used]` as `#[used(compiler)]` on illumos helps rust-lang#146169 not be as painful: fixes the illumos regression in rust-lang#140872, but `#[used(linker)]` is still erroneous on illumos generally. illumos' `ld` does not support a flag like either SHF_GNU_RETAIN or SHF_SUNW_NODISCARD, so there is no way to communicate `#[used(linker)]` for that target. Setting `USED_LINKER` to try results in LLVM setting SHF_SUNW_NODISCARD for Solaris-like targets, which is an unknown section header flag for illumos `ld` and prevents sections from being merged that otherwise would. As a motivating example, the `inventory` crate produces `#[used]` items to merge into `.init_array`. Because those items have an unknown section header flag they are not merged with the default `.init_array` with `frame_dummy`, and end up never executed. Downgrading `#[used]` to `#[used(compiler)]` on illumos keeps so-attributed items as preserved as they had been before rust-lang#140872. As was the case before that change, because rustc passes `-z ignore` to illumos `ld`, it's possible that `used` sections are GC'd at link time. rust-lang#146169 describes this unfortunate circumstance. ---- as it turns out, `tests/ui/attributes/used_with_archive.rs` had broken on `x86_64-unknown-illumos`, and this patch fixes it. the trials and tribulations of tier 2 :( r? ```@Noratrieb``` probably?
Rollup of 10 pull requests Successful merges: - #142670 (Document fully-qualified syntax in `as`' keyword doc) - #145685 (add CloneFromCell and Cell::get_cloned) - #146330 (Bump unicode_data and printables to version 17.0.0) - #146451 (Fix atan2 inaccuracy in documentation) - #146479 (add mem::conjure_zst) - #147117 (interpret `#[used]` as `#[used(compiler)]` on illumos) - #147190 (std: `sys::net` cleanups) - #147251 (Do not assert that a change in global cache only happens when concurrent) - #147280 (Return to needs-llvm-components being info-only) - #147315 (bless autodiff batching test) r? `@ghost` `@rustbot` modify labels: rollup
Uh oh!
There was an error while loading. Please reload this page.
Rollup merge of #147117 - iximeow:ixi/illumos-used-attr, r=Noratrieb interpret `#[used]` as `#[used(compiler)]` on illumos helps #146169 not be as painful: fixes the illumos regression in #140872, but `#[used(linker)]` is still erroneous on illumos generally. illumos' `ld` does not support a flag like either SHF_GNU_RETAIN or SHF_SUNW_NODISCARD, so there is no way to communicate `#[used(linker)]` for that target. Setting `USED_LINKER` to try results in LLVM setting SHF_SUNW_NODISCARD for Solaris-like targets, which is an unknown section header flag for illumos `ld` and prevents sections from being merged that otherwise would. As a motivating example, the `inventory` crate produces `#[used]` items to merge into `.init_array`. Because those items have an unknown section header flag they are not merged with the default `.init_array` with `frame_dummy`, and end up never executed. Downgrading `#[used]` to `#[used(compiler)]` on illumos keeps so-attributed items as preserved as they had been before #140872. As was the case before that change, because rustc passes `-z ignore` to illumos `ld`, it's possible that `used` sections are GC'd at link time. #146169 describes this unfortunate circumstance. ---- as it turns out, `tests/ui/attributes/used_with_archive.rs` had broken on `x86_64-unknown-illumos`, and this patch fixes it. the trials and tribulations of tier 2 :( r? ````@Noratrieb```` probably?
helps #146169 not be as painful: fixes the illumos regression in #140872, but
#[used(linker)]is still erroneous on illumos generally.illumos'
lddoes not support a flag like either SHF_GNU_RETAIN or SHF_SUNW_NODISCARD, so there is no way to communicate#[used(linker)]for that target. SettingUSED_LINKERto try results in LLVM setting SHF_SUNW_NODISCARD for Solaris-like targets, which is an unknown section header flag for illumosldand prevents sections from being merged that otherwise would.As a motivating example, the
inventorycrate produces#[used]items to merge into.init_array. Because those items have an unknown section header flag they are not merged with the default.init_arraywithframe_dummy, and end up never executed.Downgrading
#[used]to#[used(compiler)]on illumos keeps so-attributed items as preserved as they had been before #140872. As was the case before that change, because rustc passes-z ignoreto illumosld, it's possible thatusedsections are GC'd at link time. #146169 describes this unfortunate circumstance.as it turns out,
tests/ui/attributes/used_with_archive.rshad broken onx86_64-unknown-illumos, and this patch fixes it. the trials and tribulations of tier 2 :(r? @Noratrieb probably?