Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Lint on combining #[no_mangle] and #[export_name] #131558

Conversation

sassman
Copy link
Contributor

@sassman sassman commented Oct 11, 2024

This is my very first contribution to the compiler, even though I read the chapter about lints I'm not very certain that this new lint is done right as a builtin lint PR is right. I appreciate any guidance on how to improve the code.

Old proposed new lint

The mixed_export_name_and_no_mangle lint detects usage of both #[export_name] and #[no_mangle] on the same item which results on #[no_mangle] being ignored.

warn-by-default

Example

#[no_mangle] // ignored
#[export_name = "foo"] // takes precedences
pub fn bar() {}

Explanation

The compiler will not respect the #[no_mangle] attribute when generating the symbol name for the function, as the #[export_name] attribute takes precedence. This can lead to confusion and is unnecessary.

Fixes #47446

@rustbot
Copy link
Collaborator

rustbot commented Oct 11, 2024

Thanks for the pull request, and welcome! The Rust team is excited to review your changes, and you should hear from @TaKO8Ki (or someone else) some time within the next two weeks.

Please see the contribution instructions for more information. Namely, in order to ensure the minimum review times lag, PR authors and assigned reviewers should ensure that the review label (S-waiting-on-review and S-waiting-on-author) stays updated, invoking these commands when appropriate:

  • @rustbot author: the review is finished, PR author should check the comments and take action accordingly
  • @rustbot review: the author is ready for a review, this PR will be queued again in the reviewer's queue

@rustbot rustbot added S-waiting-on-review Status: Awaiting review from the assignee but also interested parties. T-compiler Relevant to the compiler team, which will review and decide on the PR/issue. labels Oct 11, 2024
@sassman sassman force-pushed the feat/warnin-for-no-mangle-together-with-export-name branch from f6d8242 to aa419ee Compare October 11, 2024 16:29
@rust-log-analyzer

This comment has been minimized.

@workingjubilee workingjubilee changed the title fix: rust-lang/rust#47446 Lint on combining #[no_mangle] and #[export_name] Oct 11, 2024
@workingjubilee
Copy link
Member

@Urgau Do you know why all these lints are prefixed by Builtin? Aren't all the lints in the compiler built-in by definition?

@Urgau
Copy link
Member

Urgau commented Oct 11, 2024

Do you know why all these lints are prefixed by Builtin? Aren't all the lints in the compiler built-in by definition?

It's probably a prefix for the lints defined inside compiler/rustc_lint/src/builtin.rs.

Lints outside of that file don't seems to have it at least.

@rust-log-analyzer

This comment has been minimized.

@workingjubilee
Copy link
Member

workingjubilee commented Oct 11, 2024

Ah, I see.

Mm, great, in tests/ui/asm/naked-functions.rs we find this gem:

#[export_name = "exported_function_name"]
#[link_section = ".custom_section"]
#[no_mangle]
#[naked]
pub unsafe extern "C" fn compatible_ffi_attributes_1() {
    naked_asm!("", options(raw));
}

@sassman Thank you for PRing this lint! It looks like you will have to fix a few cases of it in our test suite as well, and --bless. Feel free to apply either, as you prefer, to relevant cases like that "naked" function.

@sassman sassman force-pushed the feat/warnin-for-no-mangle-together-with-export-name branch from 8c2d9ca to a7989cb Compare October 13, 2024 12:24
@rust-log-analyzer

This comment has been minimized.

@sassman sassman force-pushed the feat/warnin-for-no-mangle-together-with-export-name branch from ff86482 to 1f849df Compare October 13, 2024 22:34
@rust-log-analyzer

This comment has been minimized.

@rust-log-analyzer

This comment has been minimized.

@sassman sassman marked this pull request as ready for review October 14, 2024 09:08
@sassman
Copy link
Contributor Author

sassman commented Oct 14, 2024

Now the tests run all green and I have cleaned up the other test that used both no_mangle and export_name and simply removed the no_mangle in tests/ui/asm/naked-functions.rs.

Please let me know if there is anything that I can do further.

@Urgau
Copy link
Member

Urgau commented Oct 14, 2024

I think this check is miss-placed, I think it should be with the others codegen attributes handling in the codegen_fn_attrs function in compiler/rustc_codegen_ssa/src/codegen_attrs.rs.

You can look at the check_link_name_xor_ordinal function for inspiration:

check_link_name_xor_ordinal(tcx, &codegen_fn_attrs, link_ordinal_span);

As well as TyCtxt::emit_node_span_lint for emitting the lint.
You will also need to move the lint definition into the rustc_lint_defs crate and import that crate in rustc_codegen_ssa.

@rustbot author

@Urgau Urgau assigned Urgau and unassigned TaKO8Ki Oct 14, 2024
@Urgau Urgau added S-waiting-on-author Status: This is awaiting some action (such as code changes or more information) from the author. and removed S-waiting-on-review Status: Awaiting review from the assignee but also interested parties. labels Oct 14, 2024
@sassman
Copy link
Contributor Author

sassman commented Oct 14, 2024

Thanks @Urgau for the guidance, I will refactor the code accordingly.
The provided example seems pretty helpful to figure things out.

@rust-log-analyzer

This comment has been minimized.

@sassman
Copy link
Contributor Author

sassman commented Oct 14, 2024

@Urgau I have refactored the code, but just to be sure I get things right, with this approach we won't have "named" lints that a user can allow or deny anymore or am I missing something?

In the previous commit the lint was tied to the LintDiagnostic struct, that is now not anymore present.

If I did got this right then I will adjust the introduced error output expectation to fix the build error:
https://github.com/rust-lang/rust/actions/runs/11332684748/job/31515339659?pr=131558#step:26:3779

@Urgau
Copy link
Member

Urgau commented Oct 15, 2024

Reminder, don't forget to use the rustbot review commands.

@Urgau Urgau added S-waiting-on-author Status: This is awaiting some action (such as code changes or more information) from the author. and removed S-waiting-on-fcp Status: PR is in FCP and is awaiting for FCP to complete. labels Dec 9, 2024
@rust-log-analyzer

This comment has been minimized.

commit suggestion of not always pretty printing

Co-authored-by: Urgau <[email protected]>
@sassman sassman force-pushed the feat/warnin-for-no-mangle-together-with-export-name branch from 8f4622d to 7951d19 Compare December 9, 2024 20:00
@sassman
Copy link
Contributor Author

sassman commented Dec 9, 2024

@rustbot review

@rustbot rustbot added S-waiting-on-review Status: Awaiting review from the assignee but also interested parties. and removed S-waiting-on-author Status: This is awaiting some action (such as code changes or more information) from the author. labels Dec 9, 2024
@Urgau
Copy link
Member

Urgau commented Dec 9, 2024

@bors r+

@bors
Copy link
Contributor

bors commented Dec 9, 2024

📌 Commit 7951d19 has been approved by Urgau

It is now in the queue for this repository.

@bors bors added S-waiting-on-bors Status: Waiting on bors to run and complete tests. Bors will change the label on completion. and removed S-waiting-on-review Status: Awaiting review from the assignee but also interested parties. labels Dec 9, 2024
fmease added a commit to fmease/rust that referenced this pull request Dec 9, 2024
…together-with-export-name, r=Urgau

Lint on combining `#[no_mangle]` and `#[export_name]`

This is my very first contribution to the compiler, even though I read the [chapter about lints](https://rustc-dev-guide.rust-lang.org/diagnostics.html) I'm not very certain that this ~~new lint is done right as a builtin lint~~ PR is right. I appreciate any guidance on how to improve the code.

- Add test for issue rust-lang#47446
- ~~Implement the new lint `mixed_export_name_and_no_mangle` as a builtin lint (not sure if that is the right way to go)~~ Extend `unused_attributes` lint
- Add suggestion how to fix it

<details>

<summary>Old proposed new lint</summary>

> The `mixed_export_name_and_no_mangle` lint detects usage of both `#[export_name]` and `#[no_mangle]` on the same item which results on `#[no_mangle]` being ignored.
>
> *warn-by-default*
>
> ### Example
>
> ```rust
> #[no_mangle] // ignored
> #[export_name = "foo"] // takes precedences
> pub fn bar() {}
> ```
>
> ### Explanation
>
> The compiler will not respect the `#[no_mangle]` attribute when generating the symbol name for the function, as the `#[export_name]` attribute takes precedence. This can lead to confusion and is unnecessary.

</details>
fmease added a commit to fmease/rust that referenced this pull request Dec 9, 2024
…together-with-export-name, r=Urgau

Lint on combining `#[no_mangle]` and `#[export_name]`

This is my very first contribution to the compiler, even though I read the [chapter about lints](https://rustc-dev-guide.rust-lang.org/diagnostics.html) I'm not very certain that this ~~new lint is done right as a builtin lint~~ PR is right. I appreciate any guidance on how to improve the code.

- Add test for issue rust-lang#47446
- ~~Implement the new lint `mixed_export_name_and_no_mangle` as a builtin lint (not sure if that is the right way to go)~~ Extend `unused_attributes` lint
- Add suggestion how to fix it

<details>

<summary>Old proposed new lint</summary>

> The `mixed_export_name_and_no_mangle` lint detects usage of both `#[export_name]` and `#[no_mangle]` on the same item which results on `#[no_mangle]` being ignored.
>
> *warn-by-default*
>
> ### Example
>
> ```rust
> #[no_mangle] // ignored
> #[export_name = "foo"] // takes precedences
> pub fn bar() {}
> ```
>
> ### Explanation
>
> The compiler will not respect the `#[no_mangle]` attribute when generating the symbol name for the function, as the `#[export_name]` attribute takes precedence. This can lead to confusion and is unnecessary.

</details>
bors added a commit to rust-lang-ci/rust that referenced this pull request Dec 10, 2024
Rollup of 10 pull requests

Successful merges:

 - rust-lang#131558 (Lint on combining `#[no_mangle]` and `#[export_name]`)
 - rust-lang#133122 (Add unpolished, experimental support for AFIDT (async fn in dyn trait))
 - rust-lang#133184 (wasi/fs: Improve stopping condition for <ReadDir as Iterator>::next)
 - rust-lang#133456 (Add licenses + Run `cargo update`)
 - rust-lang#133472 (Run TLS destructors for wasm32-wasip1-threads)
 - rust-lang#133853 (use vendor sources by default on dist tarballs)
 - rust-lang#133946 (coverage: Prefer to visit nodes whose predecessors have been visited)
 - rust-lang#134010 (fix ICE on type error in promoted)
 - rust-lang#134029 (coverage: Use a query to find counters/expressions that must be zero)
 - rust-lang#134071 (Configure renovatebot)

r? `@ghost`
`@rustbot` modify labels: rollup
bors added a commit to rust-lang-ci/rust that referenced this pull request Dec 10, 2024
Rollup of 10 pull requests

Successful merges:

 - rust-lang#131558 (Lint on combining `#[no_mangle]` and `#[export_name]`)
 - rust-lang#133184 (wasi/fs: Improve stopping condition for <ReadDir as Iterator>::next)
 - rust-lang#133456 (Add licenses + Run `cargo update`)
 - rust-lang#133472 (Run TLS destructors for wasm32-wasip1-threads)
 - rust-lang#133853 (use vendor sources by default on dist tarballs)
 - rust-lang#133946 (coverage: Prefer to visit nodes whose predecessors have been visited)
 - rust-lang#134010 (fix ICE on type error in promoted)
 - rust-lang#134029 (coverage: Use a query to find counters/expressions that must be zero)
 - rust-lang#134071 (Configure renovatebot)
 - rust-lang#134102 (Miscellaneous fixes for nix-dev-shell)

r? `@ghost`
`@rustbot` modify labels: rollup
@bors bors merged commit 94d780d into rust-lang:master Dec 10, 2024
6 checks passed
@rustbot rustbot added this to the 1.85.0 milestone Dec 10, 2024
rust-timer added a commit to rust-lang-ci/rust that referenced this pull request Dec 10, 2024
Rollup merge of rust-lang#131558 - sassman:feat/warnin-for-no-mangle-together-with-export-name, r=Urgau

Lint on combining `#[no_mangle]` and `#[export_name]`

This is my very first contribution to the compiler, even though I read the [chapter about lints](https://rustc-dev-guide.rust-lang.org/diagnostics.html) I'm not very certain that this ~~new lint is done right as a builtin lint~~ PR is right. I appreciate any guidance on how to improve the code.

- Add test for issue rust-lang#47446
- ~~Implement the new lint `mixed_export_name_and_no_mangle` as a builtin lint (not sure if that is the right way to go)~~ Extend `unused_attributes` lint
- Add suggestion how to fix it

<details>

<summary>Old proposed new lint</summary>

> The `mixed_export_name_and_no_mangle` lint detects usage of both `#[export_name]` and `#[no_mangle]` on the same item which results on `#[no_mangle]` being ignored.
>
> *warn-by-default*
>
> ### Example
>
> ```rust
> #[no_mangle] // ignored
> #[export_name = "foo"] // takes precedences
> pub fn bar() {}
> ```
>
> ### Explanation
>
> The compiler will not respect the `#[no_mangle]` attribute when generating the symbol name for the function, as the `#[export_name]` attribute takes precedence. This can lead to confusion and is unnecessary.

</details>
@sassman sassman deleted the feat/warnin-for-no-mangle-together-with-export-name branch December 11, 2024 22:05
@Kobzol
Copy link
Contributor

Kobzol commented Dec 23, 2024

@rust-timer build 79254c6

@rust-timer

This comment has been minimized.

@rust-timer
Copy link
Collaborator

Finished benchmarking commit (79254c6): comparison URL.

Overall result: no relevant changes - no action needed

Benchmarking this pull request likely means that it is perf-sensitive, so we're automatically marking it as not fit for rolling up. While you can manually mark this PR as fit for rollup, we strongly recommend not doing so since this PR may lead to changes in compiler perf.

@bors rollup=never
@rustbot label: -S-waiting-on-perf -perf-regression

Instruction count

This benchmark run did not return any relevant results for this metric.

Max RSS (memory usage)

Results (primary -3.0%, secondary -0.3%)

This is a less reliable metric that may be of interest but was not used to determine the overall result at the top of this comment.

mean range count
Regressions ❌
(primary)
- - 0
Regressions ❌
(secondary)
2.8% [2.8%, 2.8%] 1
Improvements ✅
(primary)
-3.0% [-4.7%, -1.3%] 2
Improvements ✅
(secondary)
-3.4% [-3.4%, -3.4%] 1
All ❌✅ (primary) -3.0% [-4.7%, -1.3%] 2

Cycles

Results (secondary 2.1%)

This is a less reliable metric that may be of interest but was not used to determine the overall result at the top of this comment.

mean range count
Regressions ❌
(primary)
- - 0
Regressions ❌
(secondary)
2.1% [2.0%, 2.3%] 2
Improvements ✅
(primary)
- - 0
Improvements ✅
(secondary)
- - 0
All ❌✅ (primary) - - 0

Binary size

Results (secondary -0.0%)

This is a less reliable metric that may be of interest but was not used to determine the overall result at the top of this comment.

mean range count
Regressions ❌
(primary)
- - 0
Regressions ❌
(secondary)
- - 0
Improvements ✅
(primary)
- - 0
Improvements ✅
(secondary)
-0.0% [-0.0%, -0.0%] 1
All ❌✅ (primary) - - 0

Bootstrap: 767.346s -> 766.133s (-0.16%)
Artifact size: 330.96 MiB -> 330.98 MiB (0.00%)

wip-sync pushed a commit to NetBSD/pkgsrc-wip that referenced this pull request Feb 23, 2025
Pkgsrc changes relative to rust184:

 * patch reorganization to deal with new version
   of upstream vendored crates, checksum updates.

Version 1.85.0 (2025-02-20)
==========================

Language
--------
- [The 2024 Edition is now stable.]
  (rust-lang/rust#133349)
  See [the edition guide]
  (https://doc.rust-lang.org/nightly/edition-guide/rust-2024/index.html)
  for more details.
- [Stabilize async closures]
  (rust-lang/rust#132706)
  See [RFC 3668]
  (https://rust-lang.github.io/rfcs/3668-async-closures.html) for more details.
- [Stabilize `#[diagnostic::do_not_recommend]`]
  (rust-lang/rust#132056)
- [Add `unpredictable_function_pointer_comparisons` lint to warn
  against function pointer comparisons]
  (rust-lang/rust#118833)
- [Lint on combining `#[no_mangle]` and `#[export_name]` attributes.]
  (rust-lang/rust#131558)

Compiler
--------
- [The unstable flag `-Zpolymorphize` has been removed]
  (rust-lang/rust#133883), see
  rust-lang/compiler-team#810 for some
  background.

Platform Support
----------------
- [Promote `powerpc64le-unknown-linux-musl` to tier 2 with host tools]
  (rust-lang/rust#133801)

Refer to Rust's [platform support page][platform-support-doc]
for more information on Rust's tiered platform support.

Libraries
---------
- [Panics in the standard library now have a leading `library/` in their path]
  (rust-lang/rust#132390)
- [`std::env::home_dir()` on Windows now ignores the non-standard
  `$HOME` environment variable]
  (rust-lang/rust#132515)

  It will be un-deprecated in a subsequent release.
- [Add `AsyncFn*` to the prelude in all editions.]
  (rust-lang/rust#132611)

Stabilized APIs
---------------

- [`BuildHasherDefault::new`]
  (https://doc.rust-lang.org/stable/std/hash/struct.BuildHasherDefault.html#method.new)
- [`ptr::fn_addr_eq`]
  (https://doc.rust-lang.org/std/ptr/fn.fn_addr_eq.html)
- [`io::ErrorKind::QuotaExceeded`]
  (https://doc.rust-lang.org/stable/std/io/enum.ErrorKind.html#variant.QuotaExceeded)
- [`io::ErrorKind::CrossesDevices`]
  (https://doc.rust-lang.org/stable/std/io/enum.ErrorKind.html#variant.CrossesDevices)
- [`{float}::midpoint`]
  (https://doc.rust-lang.org/core/primitive.f32.html#method.midpoint)
- [Unsigned `{integer}::midpoint`]
  (https://doc.rust-lang.org/std/primitive.u64.html#method.midpoint)
- [`NonZeroU*::midpoint`]
  (https://doc.rust-lang.org/std/num/type.NonZeroU32.html#method.midpoint)
- [impl `std::iter::Extend` for tuples with arity 1 through 12]
  (https://doc.rust-lang.org/stable/std/iter/trait.Extend.html#impl-Extend%3C(A,)%3E-for-(EA,))
- [`FromIterator<(A, ...)>` for tuples with arity 1 through 12]
  (https://doc.rust-lang.org/stable/std/iter/trait.FromIterator.html#impl-FromIterator%3C(EA,)%3E-for-(A,))
- [`std::task::Waker::noop`]
  (https://doc.rust-lang.org/stable/std/task/struct.Waker.html#method.noop)

These APIs are now stable in const contexts:

- [`mem::size_of_val`]
  (https://doc.rust-lang.org/stable/std/mem/fn.size_of_val.html)
- [`mem::align_of_val`]
  (https://doc.rust-lang.org/stable/std/mem/fn.align_of_val.html)
- [`Layout::for_value`]
  (https://doc.rust-lang.org/stable/std/alloc/struct.Layout.html#method.for_value)
- [`Layout::align_to`]
  (https://doc.rust-lang.org/stable/std/alloc/struct.Layout.html#method.align_to)
- [`Layout::pad_to_align`]
  (https://doc.rust-lang.org/stable/std/alloc/struct.Layout.html#method.pad_to_align)
- [`Layout::extend`]
  (https://doc.rust-lang.org/stable/std/alloc/struct.Layout.html#method.extend)
- [`Layout::array`]
  (https://doc.rust-lang.org/stable/std/alloc/struct.Layout.html#method.array)
- [`std::mem::swap`]
  (https://doc.rust-lang.org/stable/std/mem/fn.swap.html)
- [`std::ptr::swap`]
  (https://doc.rust-lang.org/stable/std/ptr/fn.swap.html)
- [`NonNull::new`]
  (https://doc.rust-lang.org/stable/std/ptr/struct.NonNull.html#method.new)
- [`HashMap::with_hasher`]
  (https://doc.rust-lang.org/stable/std/collections/struct.HashMap.html#method.with_hasher)
- [`HashSet::with_hasher`]
  (https://doc.rust-lang.org/stable/std/collections/struct.HashSet.html#method.with_hasher)
- [`BuildHasherDefault::new`]
  (https://doc.rust-lang.org/stable/std/hash/struct.BuildHasherDefault.html#method.new)
- [`<float>::recip`]
  (https://doc.rust-lang.org/stable/std/primitive.f32.html#method.recip)
- [`<float>::to_degrees`]
  (https://doc.rust-lang.org/stable/std/primitive.f32.html#method.to_degrees)
- [`<float>::to_radians`]
  (https://doc.rust-lang.org/stable/std/primitive.f32.html#method.to_radians)
- [`<float>::max`]
  (https://doc.rust-lang.org/stable/std/primitive.f32.html#method.max)
- [`<float>::min`]
  (https://doc.rust-lang.org/stable/std/primitive.f32.html#method.min)
- [`<float>::clamp`]
  (https://doc.rust-lang.org/stable/std/primitive.f32.html#method.clamp)
- [`<float>::abs`]
  (https://doc.rust-lang.org/stable/std/primitive.f32.html#method.abs)
- [`<float>::signum`]
  (https://doc.rust-lang.org/stable/std/primitive.f32.html#method.signum)
- [`<float>::copysign`]
  (https://doc.rust-lang.org/stable/std/primitive.f32.html#method.copysign)
- [`MaybeUninit::write`]
  (https://doc.rust-lang.org/stable/std/mem/union.MaybeUninit.html#method.write)

Cargo
-----
- [Add future-incompatibility warning against keywords in cfgs and
  add raw-idents] (rust-lang/cargo#14671)
- [Stabilize higher precedence trailing flags]
  (rust-lang/cargo#14900)
- [Pass `CARGO_CFG_FEATURE` to build scripts]
  (rust-lang/cargo#14902)

Rustdoc
-----
- [Doc comment on impl blocks shows the first line, even when the
  impl block is collapsed] (rust-lang/rust#132155)

Compatibility Notes
-------------------
- [`rustc` no longer treats the `test` cfg as a well known
  check-cfg] (rust-lang/rust#131729),
  instead it is up to the build systems and users of
  `--check-cfg`[^check-cfg] to set it as a well known cfg using
  `--check-cfg=cfg(test)`.

  This is done to enable build systems like Cargo to set it
  conditionally, as not all source files are suitable for unit
  tests.

  [Cargo (for now) unconditionally sets the `test` cfg as a well known cfg]
  (rust-lang/cargo#14963).
  [^check-cfg]: https://doc.rust-lang.org/nightly/rustc/check-cfg.html

- [Disable potentially incorrect type inference if there are trivial
  and non-trivial where-clauses]
  (rust-lang/rust#132325)

- `std::env::home_dir()` has been deprecated for years, because it
  can give surprising results in some Windows configurations if the
  `HOME` environment variable is set (which is not the normal
  configuration on Windows). We had previously avoided changing its
  behavior, out of concern for compatibility with code depending on
  this non-standard configuration. Given how long this function has
  been deprecated, we're now fixing its behavior as a bugfix. A
  subsequent release will remove the deprecation for this function.

- [Make `core::ffi::c_char` signedness more closely match that of
  the platform-default `char`]
  (rust-lang/rust#132975)

  This changed `c_char` from an `i8` to `u8` or vice versa on many
  Tier 2 and 3 targets (mostly Arm and RISC-V embedded targets).
  The new definition may result in compilation failures but fixes
  compatibility issues with C.

  The `libc` crate matches this change as of its 0.2.169 release.

- [When compiling a nested `macro_rules` macro from an external
  crate, the content of the inner `macro_rules` is now built with
  the edition of the external crate, not the local crate.]
  (rust-lang/rust#133274)
- [Increase `sparcv9-sun-solaris` and `x86_64-pc-solaris` Solaris
  baseline to 11.4.]
  (rust-lang/rust#133293)
- [Show `abi_unsupported_vector_types` lint in future breakage reports]
  (rust-lang/rust#133374)
- [Error if multiple super-trait instantiations of `dyn Trait` need
  associated types to be specified but only one is provided]
  (rust-lang/rust#133392)
- [Change `powerpc64-ibm-aix` default `codemodel` to large]
  (rust-lang/rust#133811)

Internal Changes
----------------

These changes do not affect any public interfaces of Rust, but they
represent significant improvements to the performance or internals
of rustc and related tools.

- [Build `x86_64-unknown-linux-gnu` with LTO for C/C++ code (e.g., `jemalloc`)]
  (rust-lang/rust#134690)
tmeijn pushed a commit to tmeijn/dotfiles that referenced this pull request Feb 26, 2025
This MR contains the following updates:

| Package | Update | Change |
|---|---|---|
| [rust](https://github.com/rust-lang/rust) | minor | `1.84.1` -> `1.85.0` |

MR created with the help of [el-capitano/tools/renovate-bot](https://gitlab.com/el-capitano/tools/renovate-bot).

**Proposed changes to behavior should be submitted there as MRs.**

---

### Release Notes

<details>
<summary>rust-lang/rust (rust)</summary>

### [`v1.85.0`](https://github.com/rust-lang/rust/blob/HEAD/RELEASES.md#Version-1850-2025-02-20)

[Compare Source](rust-lang/rust@1.84.1...1.85.0)

\==========================

<a id="1.85.0-Language"></a>

## Language

-   [The 2024 Edition is now stable.](rust-lang/rust#133349)
    See [the edition guide](https://doc.rust-lang.org/nightly/edition-guide/rust-2024/index.html) for more details.
-   [Stabilize async closures](rust-lang/rust#132706)
    See [RFC 3668](https://rust-lang.github.io/rfcs/3668-async-closures.html) for more details.
-   [Stabilize `#[diagnostic::do_not_recommend]`](rust-lang/rust#132056)
-   [Add `unpredictable_function_pointer_comparisons` lint to warn against function pointer comparisons](rust-lang/rust#118833)
-   [Lint on combining `#[no_mangle]` and `#[export_name]` attributes.](rust-lang/rust#131558)

<a id="1.85.0-Compiler"></a>

## Compiler

-   [The unstable flag `-Zpolymorphize` has been removed](rust-lang/rust#133883), see rust-lang/compiler-team#810 for some background.

<a id="1.85.0-Platform-Support"></a>

## Platform Support

-   [Promote `powerpc64le-unknown-linux-musl` to tier 2 with host tools](rust-lang/rust#133801)

Refer to Rust's \[platform support page]\[platform-support-doc]
for more information on Rust's tiered platform support.

<a id="1.85.0-Libraries"></a>

## Libraries

-   [Panics in the standard library now have a leading `library/` in their path](rust-lang/rust#132390)
-   [`std::env::home_dir()` on Windows now ignores the non-standard `$HOME` environment variable](rust-lang/rust#132515)

    It will be un-deprecated in a subsequent release.
-   [Add `AsyncFn*` to the prelude in all editions.](rust-lang/rust#132611)

<a id="1.85.0-Stabilized-APIs"></a>

## Stabilized APIs

-   [`BuildHasherDefault::new`](https://doc.rust-lang.org/stable/std/hash/struct.BuildHasherDefault.html#method.new)
-   [`ptr::fn_addr_eq`](https://doc.rust-lang.org/std/ptr/fn.fn_addr_eq.html)
-   [`io::ErrorKind::QuotaExceeded`](https://doc.rust-lang.org/stable/std/io/enum.ErrorKind.html#variant.QuotaExceeded)
-   [`io::ErrorKind::CrossesDevices`](https://doc.rust-lang.org/stable/std/io/enum.ErrorKind.html#variant.CrossesDevices)
-   [`{float}::midpoint`](https://doc.rust-lang.org/core/primitive.f32.html#method.midpoint)
-   [Unsigned `{integer}::midpoint`](https://doc.rust-lang.org/std/primitive.u64.html#method.midpoint)
-   [`NonZeroU*::midpoint`](https://doc.rust-lang.org/std/num/type.NonZeroU32.html#method.midpoint)
-   [impl `std::iter::Extend` for tuples with arity 1 through 12](https://doc.rust-lang.org/stable/std/iter/trait.Extend.html#impl-Extend%3C\(A,\)%3E-for-\(EA,\))
-   [`FromIterator<(A, ...)>` for tuples with arity 1 through 12](https://doc.rust-lang.org/stable/std/iter/trait.FromIterator.html#impl-FromIterator%3C\(EA,\)%3E-for-\(A,\))
-   [`std::task::Waker::noop`](https://doc.rust-lang.org/stable/std/task/struct.Waker.html#method.noop)

These APIs are now stable in const contexts:

-   [`mem::size_of_val`](https://doc.rust-lang.org/stable/std/mem/fn.size_of_val.html)
-   [`mem::align_of_val`](https://doc.rust-lang.org/stable/std/mem/fn.align_of_val.html)
-   [`Layout::for_value`](https://doc.rust-lang.org/stable/std/alloc/struct.Layout.html#method.for_value)
-   [`Layout::align_to`](https://doc.rust-lang.org/stable/std/alloc/struct.Layout.html#method.align_to)
-   [`Layout::pad_to_align`](https://doc.rust-lang.org/stable/std/alloc/struct.Layout.html#method.pad_to_align)
-   [`Layout::extend`](https://doc.rust-lang.org/stable/std/alloc/struct.Layout.html#method.extend)
-   [`Layout::array`](https://doc.rust-lang.org/stable/std/alloc/struct.Layout.html#method.array)
-   [`std::mem::swap`](https://doc.rust-lang.org/stable/std/mem/fn.swap.html)
-   [`std::ptr::swap`](https://doc.rust-lang.org/stable/std/ptr/fn.swap.html)
-   [`NonNull::new`](https://doc.rust-lang.org/stable/std/ptr/struct.NonNull.html#method.new)
-   [`HashMap::with_hasher`](https://doc.rust-lang.org/stable/std/collections/struct.HashMap.html#method.with_hasher)
-   [`HashSet::with_hasher`](https://doc.rust-lang.org/stable/std/collections/struct.HashSet.html#method.with_hasher)
-   [`BuildHasherDefault::new`](https://doc.rust-lang.org/stable/std/hash/struct.BuildHasherDefault.html#method.new)
-   [`<float>::recip`](https://doc.rust-lang.org/stable/std/primitive.f32.html#method.recip)
-   [`<float>::to_degrees`](https://doc.rust-lang.org/stable/std/primitive.f32.html#method.to_degrees)
-   [`<float>::to_radians`](https://doc.rust-lang.org/stable/std/primitive.f32.html#method.to_radians)
-   [`<float>::max`](https://doc.rust-lang.org/stable/std/primitive.f32.html#method.max)
-   [`<float>::min`](https://doc.rust-lang.org/stable/std/primitive.f32.html#method.min)
-   [`<float>::clamp`](https://doc.rust-lang.org/stable/std/primitive.f32.html#method.clamp)
-   [`<float>::abs`](https://doc.rust-lang.org/stable/std/primitive.f32.html#method.abs)
-   [`<float>::signum`](https://doc.rust-lang.org/stable/std/primitive.f32.html#method.signum)
-   [`<float>::copysign`](https://doc.rust-lang.org/stable/std/primitive.f32.html#method.copysign)
-   [`MaybeUninit::write`](https://doc.rust-lang.org/stable/std/mem/union.MaybeUninit.html#method.write)

<a id="1.85.0-Cargo"></a>

## Cargo

-   [Add future-incompatibility warning against keywords in cfgs and add raw-idents](rust-lang/cargo#14671)
-   [Stabilize higher precedence trailing flags](rust-lang/cargo#14900)
-   [Pass `CARGO_CFG_FEATURE` to build scripts](rust-lang/cargo#14902)

<a id="1.85.0-Rustdoc"></a>

## Rustdoc

-   [Doc comment on impl blocks shows the first line, even when the impl block is collapsed](rust-lang/rust#132155)

<a id="1.85.0-Compatibility-Notes"></a>

## Compatibility Notes

-   [`rustc` no longer treats the `test` cfg as a well known check-cfg](rust-lang/rust#131729), instead it is up to the build systems and users of `--check-cfg`\[^check-cfg] to set it as a well known cfg using `--check-cfg=cfg(test)`.

    This is done to enable build systems like Cargo to set it conditionally, as not all source files are suitable for unit tests.
    [Cargo (for now) unconditionally sets the `test` cfg as a well known cfg](rust-lang/cargo#14963).
    \[^check-cfg]: https://doc.rust-lang.org/nightly/rustc/check-cfg.html
-   [Disable potentially incorrect type inference if there are trivial and non-trivial where-clauses](rust-lang/rust#132325)
-   `std::env::home_dir()` has been deprecated for years, because it can give surprising results in some Windows configurations if the `HOME` environment variable is set (which is not the normal configuration on Windows). We had previously avoided changing its behavior, out of concern for compatibility with code depending on this non-standard configuration. Given how long this function has been deprecated, we're now fixing its behavior as a bugfix. A subsequent release will remove the deprecation for this function.
-   [Make `core::ffi::c_char` signedness more closely match that of the platform-default `char`](rust-lang/rust#132975)

    This changed `c_char` from an `i8` to `u8` or vice versa on many Tier 2 and 3
    targets (mostly Arm and RISC-V embedded targets). The new definition may
    result in compilation failures but fixes compatibility issues with C.

    The `libc` crate matches this change as of its 0.2.169 release.
-   [When compiling a nested `macro_rules` macro from an external crate, the content of the inner `macro_rules` is now built with the edition of the external crate, not the local crate.](rust-lang/rust#133274)
-   [Increase `sparcv9-sun-solaris` and `x86_64-pc-solaris` Solaris baseline to 11.4.](rust-lang/rust#133293)
-   [Show `abi_unsupported_vector_types` lint in future breakage reports](rust-lang/rust#133374)
-   [Error if multiple super-trait instantiations of `dyn Trait` need associated types to be specified but only one is provided](rust-lang/rust#133392)
-   [Change `powerpc64-ibm-aix` default `codemodel` to large](rust-lang/rust#133811)

<a id="1.85.0-Internal-Changes"></a>

## Internal Changes

These changes do not affect any public interfaces of Rust, but they represent
significant improvements to the performance or internals of rustc and related
tools.

-   [Build `x86_64-unknown-linux-gnu` with LTO for C/C++ code (e.g., `jemalloc`)](rust-lang/rust#134690)

</details>

---

### Configuration

📅 **Schedule**: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined).

🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied.

♻ **Rebasing**: Whenever MR becomes conflicted, or you tick the rebase/retry checkbox.

🔕 **Ignore**: Close this MR and you won't be reminded about this update again.

---

 - [ ] <!-- rebase-check -->If you want to rebase/retry this MR, check this box

---

This MR has been generated by [Renovate Bot](https://github.com/renovatebot/renovate).
<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzOS4xODAuMyIsInVwZGF0ZWRJblZlciI6IjM5LjE4MC4zIiwidGFyZ2V0QnJhbmNoIjoibWFpbiIsImxhYmVscyI6WyJSZW5vdmF0ZSBCb3QiXX0=-->
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
disposition-merge This issue / PR is in PFCP or FCP with a disposition to merge it. finished-final-comment-period The final comment period is finished for this PR / Issue. S-waiting-on-bors Status: Waiting on bors to run and complete tests. Bors will change the label on completion. T-compiler Relevant to the compiler team, which will review and decide on the PR/issue. to-announce Announce this issue on triage meeting
Projects
None yet
Development

Successfully merging this pull request may close these issues.

Using both no_mangle and export_name attributes should cause a warning