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

Replace const eval limit by a lint and add an exponential backoff warning #103877

Merged
merged 1 commit into from Jun 1, 2023

Conversation

oli-obk
Copy link
Contributor

@oli-obk oli-obk commented Nov 2, 2022

The lint triggers at the first power of 2 that comes after 1 million function calls or traversed back-edges (takes less than a second on usual programs). After the first emission, an unsilenceable warning is repeated at every following power of 2 terminators, causing it to get reported less and less the longer the evaluation runs.

cc @rust-lang/wg-const-eval

fixes #93481
closes #67217

@rustbot
Copy link
Collaborator

rustbot commented Nov 2, 2022

Thanks for the pull request, and welcome! The Rust team is excited to review your changes, and you should hear from @fee1-dead (or someone else) soon.

Please see the contribution instructions for more information.

@rustbot rustbot added A-testsuite Area: The testsuite used to check the correctness of rustc 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 Nov 2, 2022
@rustbot
Copy link
Collaborator

rustbot commented Nov 2, 2022

Some changes occurred to the CTFE / Miri engine

cc @rust-lang/miri

Some changes occurred to the CTFE / Miri engine

cc @rust-lang/miri

@oli-obk oli-obk added the I-lang-nominated The issue / PR has been nominated for discussion during a lang team meeting. label Nov 2, 2022
@fee1-dead
Copy link
Member

fee1-dead commented Nov 2, 2022

Welcome to Rust, oli! :)

@oli-obk
Copy link
Contributor Author

oli-obk commented Nov 2, 2022

Nominating for T-lang discussion. Are y'all on board with having no limit on the amount of time/steps constant evaluation can take, and instead just linting on long running evaluations to keep the users aware that the compiler is still busy doing things? It does mean const FOO: () = loop {}; will just make the the compiler never finish (though emit a warning every now and then).

If the lint is denyd, the evaluation stops at the first time the warning is hit. We could also make the lint deny by default, to require users to opt-in to long running const eval on a per-crate, module or even constant level via the regular lint mechanics.

Note that if a dependency has an infinite loop, this lint will not be shown by cargo and the dependency will just be locked forever if it allowed/warned the lint.

@rust-log-analyzer

This comment has been minimized.

@inquisitivecrystal
Copy link
Contributor

inquisitivecrystal commented Nov 2, 2022

Nominating for T-lang discussion. Are y'all on board with having no limit on the amount of time/steps constant evaluation can take, and instead just linting on long running evaluations to keep the users aware that the compiler is still busy doing things? It does mean const FOO: () = loop {}; will just make the the compiler never finish (though emit a warning every now and then).

Why don't we just write a program to figure out if constant evaluation will eventually halt? It can't be that hard (this is a joke).

A more serious comment: I'd find it a bit surprising as a user if the compiler kept on going forever. Would it be possible to set some sort of limit that's so ridiculously high we'd expect it to never be hit in a valid program (I'm thinking like, the equivalent of 30 seconds or one minute of execution time, but you could even go longer)? I know it's not as conceptually nice as this approach, but I don't think most people are prepared to wait ten minutes for the compiler to stop running. At least that would avoid CI continuing until it timed out, for instance.

If we want to avoid hard limits, this could be a deny by default lint, but one with a higher threshold than the warn by default lint. I guess the point I'm gesturing at here is that the point at which we want to start warning people and the point at which we want to error out might not be the same: they might actually be quite far apart.

// Only report after a certain number of terminators have been evaluated and the
// current number of evaluated terminators is a power of 2. The latter gives us a cheap
// way to implement exponential backoff.
if new_steps > 1_000_000 && new_steps.count_ones() == 1 {
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
if new_steps > 1_000_000 && new_steps.count_ones() == 1 {
if new_steps > 1_000_000 && new_steps.is_power_of_two() {

That should be just as efficient and a little nicer

@RalfJung
Copy link
Member

RalfJung commented Nov 2, 2022

FWIW the -Zmiri-report-progress flag also uses 1_000_000 as default value for how many blocks to wait before reporting progress. So 👍 on that default value.

However the next power of two will be pretty close, won't it? So the second report comes rather quick after the first...
EDIT: Oh it doesn't report at 1 million, only at the next power of 2 after 1 million. Makes sense, but doesn't match the PR description. :)

@RalfJung
Copy link
Member

RalfJung commented Nov 2, 2022

A more serious comment: I'd find it a bit surprising as a user if the compiler kept on going forever. Would it be possible to set some sort of limit that's so ridiculously high we'd expect it to never be hit in a valid program (I'm thinking like, the equivalent of 30 seconds or one minute of execution time, but you could even go longer)? I know it's not as conceptually nice as this approach, but I don't think most people are prepared to wait ten minutes for the compiler to stop running. At least that would avoid CI continuing until it timed out, for instance.

If we set it to 30_000_000, which might be around 30s, I guarantee someone will report a bug "but I need just 2 million steps beyond that".^^ So then we need to still let users increase the limit. And worse someone might be using 29_999_999 steps and then MIR building changes and that puts their code above the threshold -- making the MIR building change a breaking change which is quite bad. That's exactly what just happened.

@marmeladema
Copy link
Contributor

Should that limit be user configurable then?

@est31
Copy link
Member

est31 commented Nov 2, 2022

Some analysis, through experimentation I found that the change that caused #103814 decreased the highest compiling const eval limit from 166_665 to 124_999. This corresponds to a 33% change in costs to the user on this particular benchmark (comparing nightlies 4b8f43199 2022-10-19 with 11ebe6512 2022-11-01).

I think not having a limit, even if that limit is not perfect, removes control from users in a bad fashion. With this PR, if you allow the lint, because you do a lot of computation, you lose the protections from infinite loops that rustc gives you: It's an either-or descision without much flexibility. Furthermore, the limit is still there, it's just hardcoded, so you still can write code that skirts around the limit (like in the instance of #103814) and then it issues warnings down the line.

I'm also not sure about the UX impact of receiving 4 warnings for a const evaluation that runs for 10 seconds.

My proposal:

  • Have two lints instead of exponential backoff, one which is warn by default (long_running_const_eval), and a second that is deny by default (very_long_running_const_eval).
  • The second lint would trigger after 4 times the limit of the first lint was hit. That gives enough space for breaking changes to be noticed before they show up as errors. The second lint would exist so that CI jobs terminate. Personally I never really look at still-running CI, most times it's because of a limited number of github actions or something like that.
  • The limit would still be configurable. It would be bound to MIR emitting changes, changes in how e.g. the len function on slices is implemented in std, or some other const fn's are implemented in upstream crates. None of these changes alone should blow past the limit with a factor of 4. The limit would still be unstable, yes, but as we are talking about lints instead of errors now, this is less of a problem: lints are allowed to be unstable.
  • The user-exposed limit might be given in multiples of thousands, and if there is some change in MIR generation that issues the lint for many people, that multiplier could be adjusted, e.g. to 1200, etc. Of course changes affect code snippets in hugely different ways, depending on which code they use.
  • For further protection, if the lint is emitted, it would provide a suggested limit value that is 50% above what is actually needed.

One can also think about AST based cost systems which might be more robust, as AST changes less regularly than MIR, so you only have the noise from upstream crates that you need to worry about. The only problem is that it is probably a huge pain to move information on "how much does this operation cost" through the compiler. MIR optimizations are another issue.

Edit: my proposal is the proposed end state, one could start with something simpler, like just having long_running_const_eval and no configurability. Also the design needs to do something about users allowing the warn-by-default lint and then hitting the deny-by-default one. Maybe have the very_long_* lint check the long_* lint's level at the span before firing?

@RalfJung
Copy link
Member

RalfJung commented Nov 3, 2022

I don't think user-defined limits are worth the complexity. These numbers have no absolute meaning and the relative scale changes over time. I think people just acknowledging "yes this const is slow please eval it anyway" is about all the flexibility we need. Crucially since this is a lint, MIR building changes can never break a dependency. I'm not even sure if we need the exponential back-off vs just a simple deny-by-default lint.

@bors
Copy link
Contributor

bors commented Nov 4, 2022

☔ The latest upstream changes (presumably #103954) made this pull request unmergeable. Please resolve the merge conflicts.

@pnkfelix
Copy link
Member

pnkfelix commented Nov 9, 2022

The lang team discussed this a bit yesterday.

Executive summary:

  • In the long term, we would prefer a more stable metric to be employed here.
    • @nikomatsakis has suggested sum of counting back-edges ("an edge in CFG where end dominates start") + procedure calls (where the counter is incremented even for mir-inlined calls).
    • @pnkfelix privately mused to @nikomatsakis whether counting "mems" would be more intuitive metric for end-users; but they agree that @nikomatsakis 's proposal of back-edges + calls should be more stable in the face of hypothetical future MIR optimizations.
    • (@nikomatsakis did privately note that even "back edges" is tricky, considering e.g. constructs like .await that expand into a loop)
  • @nikomatsakis also expressed dismay over removing a supposed "guarantee" that every rustc invocation would terminate, but the team argued that we already lost that with proc-macros.
  • We didn't make any decision about this specific PR, but the intution of @pnkfelix is that, even with the wrong metric, just moving to some lint is a step in the right direction toward making this not a hazard for people seeking to upgrade their copy of rustc.

@RalfJung
Copy link
Member

RalfJung commented Nov 9, 2022

@nikomatsakis also expressed dismay over removing a supposed "guarantee" that every rustc invocation would terminate, but the team argued that we already lost that with proc-macros.

We can always make this into a hard error after 2^48 basic blocks or so if you want to still have that guarantee. ;)

@pnkfelix
Copy link
Member

pnkfelix commented Nov 9, 2022

yes niko did make some side comment about heat death of universe while mulling over all of this

@jruderman
Copy link
Contributor

Please keep some way to set a low limit, so that fuzzing (and regression tests for iloops) can continue to run quickly. It could be a -Z flag instead of a crate attribute, so programmers who aren't trying to test the compiler are less likely to create future-incompatible code.

@RalfJung
Copy link
Member

RalfJung commented Nov 10, 2022 via email

@jruderman
Copy link
Contributor

I'm trying to avoid timeout-kills because libfuzzer takes a long time to restart (at least the way I'm using it).

@oli-obk oli-obk removed the T-compiler Relevant to the compiler team, which will review and decide on the PR/issue. label Nov 10, 2022
@rustbot rustbot removed the S-waiting-on-perf Status: Waiting on a perf run to be completed. label May 30, 2023
@oli-obk
Copy link
Contributor Author

oli-obk commented May 31, 2023

@rustbot ready

@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 May 31, 2023
@rust-log-analyzer

This comment has been minimized.

@fee1-dead
Copy link
Member

@bors r+ rollup=never

@bors
Copy link
Contributor

bors commented Jun 1, 2023

📌 Commit 05eae08 has been approved by fee1-dead

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 Jun 1, 2023
@bors
Copy link
Contributor

bors commented Jun 1, 2023

⌛ Testing commit 05eae08 with merge 23f93a1...

@bors
Copy link
Contributor

bors commented Jun 1, 2023

☀️ Test successful - checks-actions
Approved by: fee1-dead
Pushing 23f93a1 to master...

@bors bors added the merged-by-bors This PR was explicitly merged by bors. label Jun 1, 2023
@bors bors merged commit 23f93a1 into rust-lang:master Jun 1, 2023
12 checks passed
@rustbot rustbot added this to the 1.72.0 milestone Jun 1, 2023
@rust-timer
Copy link
Collaborator

Finished benchmarking commit (23f93a1): comparison URL.

Overall result: no relevant changes - no action needed

@rustbot label: -perf-regression

Instruction count

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

Max RSS (memory usage)

Results

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.7% [2.7%, 2.7%] 1
Improvements ✅
(primary)
-2.1% [-2.1%, -2.1%] 1
Improvements ✅
(secondary)
-2.5% [-2.5%, -2.5%] 1
All ❌✅ (primary) -2.1% [-2.1%, -2.1%] 1

Cycles

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

Binary size

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

Bootstrap: 644.818s -> 642.933s (-0.29%)

1715173329 added a commit to 1715173329/packages-official that referenced this pull request Aug 26, 2023
Version 1.72.0 (2023-08-24)
==========================

Language
--------

- [Replace const eval limit by a lint and add an exponential backoff warning](rust-lang/rust#103877)
- [expand: Change how `#![cfg(FALSE)]` behaves on crate root](rust-lang/rust#110141)
- [Stabilize inline asm for LoongArch64](rust-lang/rust#111235)
- [Uplift `clippy::undropped_manually_drops` lint](rust-lang/rust#111530)
- [Uplift `clippy::invalid_utf8_in_unchecked` lint](rust-lang/rust#111543)
- [Uplift `clippy::cast_ref_to_mut` lint](rust-lang/rust#111567)
- [Uplift `clippy::cmp_nan` lint](rust-lang/rust#111818)
- [resolve: Remove artificial import ambiguity errors](rust-lang/rust#112086)
- [Don't require associated types with Self: Sized bounds in `dyn Trait` objects](rust-lang/rust#112319)

Compiler
--------

- [Remember names of `cfg`-ed out items to mention them in diagnostics](rust-lang/rust#109005)
- [Support for native WASM exceptions](rust-lang/rust#111322)
- [Add support for NetBSD/aarch64-be (big-endian arm64).](rust-lang/rust#111326)
- [Write to stdout if `-` is given as output file](rust-lang/rust#111626)
- [Force all native libraries to be statically linked when linking a static binary](rust-lang/rust#111698)
- [Add Tier 3 support for `loongarch64-unknown-none*`](rust-lang/rust#112310)
- [Prevent `.eh_frame` from being emitted for `-C panic=abort`](rust-lang/rust#112403)
- [Support 128-bit enum variant in debuginfo codegen](rust-lang/rust#112474)
- [compiler: update solaris/illumos to enable tsan support.](rust-lang/rust#112039)

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

Libraries
---------

- [Document memory orderings of `thread::{park, unpark}`](rust-lang/rust#99587)
- [io: soften ‘at most one write attempt’ requirement in io::Write::write](rust-lang/rust#107200)
- [Specify behavior of HashSet::insert](rust-lang/rust#107619)
- [Relax implicit `T: Sized` bounds on `BufReader<T>`, `BufWriter<T>` and `LineWriter<T>`](rust-lang/rust#111074)
- [Update runtime guarantee for `select_nth_unstable`](rust-lang/rust#111974)
- [Return `Ok` on kill if process has already exited](rust-lang/rust#112594)
- [Implement PartialOrd for `Vec`s over different allocators](rust-lang/rust#112632)
- [Use 128 bits for TypeId hash](rust-lang/rust#109953)
- [Don't drain-on-drop in DrainFilter impls of various collections.](rust-lang/rust#104455)
- [Make `{Arc,Rc,Weak}::ptr_eq` ignore pointer metadata](rust-lang/rust#106450)

Rustdoc
-------

- [Allow whitespace as path separator like double colon](rust-lang/rust#108537)
- [Add search result item types after their name](rust-lang/rust#110688)
- [Search for slices and arrays by type with `[]`](rust-lang/rust#111958)
- [Clean up type unification and "unboxing"](rust-lang/rust#112233)

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

- [`impl<T: Send> Sync for mpsc::Sender<T>`](https://doc.rust-lang.org/nightly/std/sync/mpsc/struct.Sender.html#impl-Sync-for-Sender%3CT%3E)
- [`impl TryFrom<&OsStr> for &str`](https://doc.rust-lang.org/nightly/std/primitive.str.html#impl-TryFrom%3C%26'a+OsStr%3E-for-%26'a+str)
- [`String::leak`](https://doc.rust-lang.org/nightly/alloc/string/struct.String.html#method.leak)

These APIs are now stable in const contexts:

- [`CStr::from_bytes_with_nul`](https://doc.rust-lang.org/nightly/std/ffi/struct.CStr.html#method.from_bytes_with_nul)
- [`CStr::to_bytes`](https://doc.rust-lang.org/nightly/std/ffi/struct.CStr.html#method.from_bytes_with_nul)
- [`CStr::to_bytes_with_nul`](https://doc.rust-lang.org/nightly/std/ffi/struct.CStr.html#method.from_bytes_with_nul)
- [`CStr::to_str`](https://doc.rust-lang.org/nightly/std/ffi/struct.CStr.html#method.from_bytes_with_nul)

Cargo
-----

- Enable `-Zdoctest-in-workspace` by default. When running each documentation
  test, the working directory is set to the root directory of the package the
  test belongs to.
  [docs](https://doc.rust-lang.org/nightly/cargo/commands/cargo-test.html#working-directory-of-tests)
  [openwrt#12221](rust-lang/cargo#12221)
  [openwrt#12288](rust-lang/cargo#12288)
- Add support of the "default" keyword to reset previously set `build.jobs`
  parallelism back to the default.
  [openwrt#12222](rust-lang/cargo#12222)

Compatibility Notes
-------------------

- [Alter `Display` for `Ipv6Addr` for IPv4-compatible addresses](rust-lang/rust#112606)
- Cargo changed feature name validation check to a hard error. The warning was
  added in Rust 1.49. These extended characters aren't allowed on crates.io, so
  this should only impact users of other registries, or people who don't publish
  to a registry.
  [openwrt#12291](rust-lang/cargo#12291)

Refreshed patches.

Signed-off-by: Tianling Shen <cnsztl@immortalwrt.org>
1715173329 added a commit to 1715173329/packages-official that referenced this pull request Aug 26, 2023
Version 1.72.0 (2023-08-24)
==========================

Language
--------
- [Replace const eval limit by a lint and add an exponential backoff warning](rust-lang/rust#103877)
- [expand: Change how `#![cfg(FALSE)]` behaves on crate root](rust-lang/rust#110141)
- [Stabilize inline asm for LoongArch64](rust-lang/rust#111235)
- [Uplift `clippy::undropped_manually_drops` lint](rust-lang/rust#111530)
- [Uplift `clippy::invalid_utf8_in_unchecked` lint](rust-lang/rust#111543)
- [Uplift `clippy::cast_ref_to_mut` lint](rust-lang/rust#111567)
- [Uplift `clippy::cmp_nan` lint](rust-lang/rust#111818)
- [resolve: Remove artificial import ambiguity errors](rust-lang/rust#112086)
- [Don't require associated types with Self: Sized bounds in `dyn Trait` objects](rust-lang/rust#112319)

Compiler
--------
- [Remember names of `cfg`-ed out items to mention them in diagnostics](rust-lang/rust#109005)
- [Support for native WASM exceptions](rust-lang/rust#111322)
- [Add support for NetBSD/aarch64-be (big-endian arm64).](rust-lang/rust#111326)
- [Write to stdout if `-` is given as output file](rust-lang/rust#111626)
- [Force all native libraries to be statically linked when linking a static binary](rust-lang/rust#111698)
- [Add Tier 3 support for `loongarch64-unknown-none*`](rust-lang/rust#112310)
- [Prevent `.eh_frame` from being emitted for `-C panic=abort`](rust-lang/rust#112403)
- [Support 128-bit enum variant in debuginfo codegen](rust-lang/rust#112474)
- [compiler: update solaris/illumos to enable tsan support.](rust-lang/rust#112039)

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

Libraries
---------
- [Document memory orderings of `thread::{park, unpark}`](rust-lang/rust#99587)
- [io: soften ‘at most one write attempt’ requirement in io::Write::write](rust-lang/rust#107200)
- [Specify behavior of HashSet::insert](rust-lang/rust#107619)
- [Relax implicit `T: Sized` bounds on `BufReader<T>`, `BufWriter<T>` and `LineWriter<T>`](rust-lang/rust#111074)
- [Update runtime guarantee for `select_nth_unstable`](rust-lang/rust#111974)
- [Return `Ok` on kill if process has already exited](rust-lang/rust#112594)
- [Implement PartialOrd for `Vec`s over different allocators](rust-lang/rust#112632)
- [Use 128 bits for TypeId hash](rust-lang/rust#109953)
- [Don't drain-on-drop in DrainFilter impls of various collections.](rust-lang/rust#104455)
- [Make `{Arc,Rc,Weak}::ptr_eq` ignore pointer metadata](rust-lang/rust#106450)

Rustdoc
-------
- [Allow whitespace as path separator like double colon](rust-lang/rust#108537)
- [Add search result item types after their name](rust-lang/rust#110688)
- [Search for slices and arrays by type with `[]`](rust-lang/rust#111958)
- [Clean up type unification and "unboxing"](rust-lang/rust#112233)

Stabilized APIs
---------------
- [`impl<T: Send> Sync for mpsc::Sender<T>`](https://doc.rust-lang.org/nightly/std/sync/mpsc/struct.Sender.html#impl-Sync-for-Sender%3CT%3E)
- [`impl TryFrom<&OsStr> for &str`](https://doc.rust-lang.org/nightly/std/primitive.str.html#impl-TryFrom%3C%26'a+OsStr%3E-for-%26'a+str)
- [`String::leak`](https://doc.rust-lang.org/nightly/alloc/string/struct.String.html#method.leak)

These APIs are now stable in const contexts:

- [`CStr::from_bytes_with_nul`](https://doc.rust-lang.org/nightly/std/ffi/struct.CStr.html#method.from_bytes_with_nul)
- [`CStr::to_bytes`](https://doc.rust-lang.org/nightly/std/ffi/struct.CStr.html#method.from_bytes_with_nul)
- [`CStr::to_bytes_with_nul`](https://doc.rust-lang.org/nightly/std/ffi/struct.CStr.html#method.from_bytes_with_nul)
- [`CStr::to_str`](https://doc.rust-lang.org/nightly/std/ffi/struct.CStr.html#method.from_bytes_with_nul)

Cargo
-----
- Enable `-Zdoctest-in-workspace` by default. When running each documentation
  test, the working directory is set to the root directory of the package the
  test belongs to.
  [docs](https://doc.rust-lang.org/nightly/cargo/commands/cargo-test.html#working-directory-of-tests)
  [openwrt#12221](rust-lang/cargo#12221)
  [openwrt#12288](rust-lang/cargo#12288)
- Add support of the "default" keyword to reset previously set `build.jobs`
  parallelism back to the default.
  [openwrt#12222](rust-lang/cargo#12222)

Compatibility Notes
-------------------
- [Alter `Display` for `Ipv6Addr` for IPv4-compatible addresses](rust-lang/rust#112606)
- Cargo changed feature name validation check to a hard error. The warning was
  added in Rust 1.49. These extended characters aren't allowed on crates.io, so
  this should only impact users of other registries, or people who don't publish
  to a registry.
  [openwrt#12291](rust-lang/cargo#12291)

Refreshed patches.

Signed-off-by: Tianling Shen <cnsztl@immortalwrt.org>
jefferyto pushed a commit to jefferyto/openwrt-packages that referenced this pull request Sep 21, 2023
Version 1.72.0 (2023-08-24)
==========================

Language
--------
- [Replace const eval limit by a lint and add an exponential backoff warning](rust-lang/rust#103877)
- [expand: Change how `#![cfg(FALSE)]` behaves on crate root](rust-lang/rust#110141)
- [Stabilize inline asm for LoongArch64](rust-lang/rust#111235)
- [Uplift `clippy::undropped_manually_drops` lint](rust-lang/rust#111530)
- [Uplift `clippy::invalid_utf8_in_unchecked` lint](rust-lang/rust#111543)
- [Uplift `clippy::cast_ref_to_mut` lint](rust-lang/rust#111567)
- [Uplift `clippy::cmp_nan` lint](rust-lang/rust#111818)
- [resolve: Remove artificial import ambiguity errors](rust-lang/rust#112086)
- [Don't require associated types with Self: Sized bounds in `dyn Trait` objects](rust-lang/rust#112319)

Compiler
--------
- [Remember names of `cfg`-ed out items to mention them in diagnostics](rust-lang/rust#109005)
- [Support for native WASM exceptions](rust-lang/rust#111322)
- [Add support for NetBSD/aarch64-be (big-endian arm64).](rust-lang/rust#111326)
- [Write to stdout if `-` is given as output file](rust-lang/rust#111626)
- [Force all native libraries to be statically linked when linking a static binary](rust-lang/rust#111698)
- [Add Tier 3 support for `loongarch64-unknown-none*`](rust-lang/rust#112310)
- [Prevent `.eh_frame` from being emitted for `-C panic=abort`](rust-lang/rust#112403)
- [Support 128-bit enum variant in debuginfo codegen](rust-lang/rust#112474)
- [compiler: update solaris/illumos to enable tsan support.](rust-lang/rust#112039)

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

Libraries
---------
- [Document memory orderings of `thread::{park, unpark}`](rust-lang/rust#99587)
- [io: soften ‘at most one write attempt’ requirement in io::Write::write](rust-lang/rust#107200)
- [Specify behavior of HashSet::insert](rust-lang/rust#107619)
- [Relax implicit `T: Sized` bounds on `BufReader<T>`, `BufWriter<T>` and `LineWriter<T>`](rust-lang/rust#111074)
- [Update runtime guarantee for `select_nth_unstable`](rust-lang/rust#111974)
- [Return `Ok` on kill if process has already exited](rust-lang/rust#112594)
- [Implement PartialOrd for `Vec`s over different allocators](rust-lang/rust#112632)
- [Use 128 bits for TypeId hash](rust-lang/rust#109953)
- [Don't drain-on-drop in DrainFilter impls of various collections.](rust-lang/rust#104455)
- [Make `{Arc,Rc,Weak}::ptr_eq` ignore pointer metadata](rust-lang/rust#106450)

Rustdoc
-------
- [Allow whitespace as path separator like double colon](rust-lang/rust#108537)
- [Add search result item types after their name](rust-lang/rust#110688)
- [Search for slices and arrays by type with `[]`](rust-lang/rust#111958)
- [Clean up type unification and "unboxing"](rust-lang/rust#112233)

Stabilized APIs
---------------
- [`impl<T: Send> Sync for mpsc::Sender<T>`](https://doc.rust-lang.org/nightly/std/sync/mpsc/struct.Sender.html#impl-Sync-for-Sender%3CT%3E)
- [`impl TryFrom<&OsStr> for &str`](https://doc.rust-lang.org/nightly/std/primitive.str.html#impl-TryFrom%3C%26'a+OsStr%3E-for-%26'a+str)
- [`String::leak`](https://doc.rust-lang.org/nightly/alloc/string/struct.String.html#method.leak)

These APIs are now stable in const contexts:

- [`CStr::from_bytes_with_nul`](https://doc.rust-lang.org/nightly/std/ffi/struct.CStr.html#method.from_bytes_with_nul)
- [`CStr::to_bytes`](https://doc.rust-lang.org/nightly/std/ffi/struct.CStr.html#method.from_bytes_with_nul)
- [`CStr::to_bytes_with_nul`](https://doc.rust-lang.org/nightly/std/ffi/struct.CStr.html#method.from_bytes_with_nul)
- [`CStr::to_str`](https://doc.rust-lang.org/nightly/std/ffi/struct.CStr.html#method.from_bytes_with_nul)

Cargo
-----
- Enable `-Zdoctest-in-workspace` by default. When running each documentation
  test, the working directory is set to the root directory of the package the
  test belongs to.
  [docs](https://doc.rust-lang.org/nightly/cargo/commands/cargo-test.html#working-directory-of-tests)
  [openwrt#12221](rust-lang/cargo#12221)
  [openwrt#12288](rust-lang/cargo#12288)
- Add support of the "default" keyword to reset previously set `build.jobs`
  parallelism back to the default.
  [openwrt#12222](rust-lang/cargo#12222)

Compatibility Notes
-------------------
- [Alter `Display` for `Ipv6Addr` for IPv4-compatible addresses](rust-lang/rust#112606)
- Cargo changed feature name validation check to a hard error. The warning was
  added in Rust 1.49. These extended characters aren't allowed on crates.io, so
  this should only impact users of other registries, or people who don't publish
  to a registry.
  [openwrt#12291](rust-lang/cargo#12291)

Refreshed patches.

Signed-off-by: Tianling Shen <cnsztl@immortalwrt.org>
(cherry picked from commit 846ee0b)
Signed-off-by: Jeffery To <jeffery.to@gmail.com>
BKPepe pushed a commit to openwrt/packages that referenced this pull request Sep 21, 2023
Version 1.72.0 (2023-08-24)
==========================

Language
--------
- [Replace const eval limit by a lint and add an exponential backoff warning](rust-lang/rust#103877)
- [expand: Change how `#![cfg(FALSE)]` behaves on crate root](rust-lang/rust#110141)
- [Stabilize inline asm for LoongArch64](rust-lang/rust#111235)
- [Uplift `clippy::undropped_manually_drops` lint](rust-lang/rust#111530)
- [Uplift `clippy::invalid_utf8_in_unchecked` lint](rust-lang/rust#111543)
- [Uplift `clippy::cast_ref_to_mut` lint](rust-lang/rust#111567)
- [Uplift `clippy::cmp_nan` lint](rust-lang/rust#111818)
- [resolve: Remove artificial import ambiguity errors](rust-lang/rust#112086)
- [Don't require associated types with Self: Sized bounds in `dyn Trait` objects](rust-lang/rust#112319)

Compiler
--------
- [Remember names of `cfg`-ed out items to mention them in diagnostics](rust-lang/rust#109005)
- [Support for native WASM exceptions](rust-lang/rust#111322)
- [Add support for NetBSD/aarch64-be (big-endian arm64).](rust-lang/rust#111326)
- [Write to stdout if `-` is given as output file](rust-lang/rust#111626)
- [Force all native libraries to be statically linked when linking a static binary](rust-lang/rust#111698)
- [Add Tier 3 support for `loongarch64-unknown-none*`](rust-lang/rust#112310)
- [Prevent `.eh_frame` from being emitted for `-C panic=abort`](rust-lang/rust#112403)
- [Support 128-bit enum variant in debuginfo codegen](rust-lang/rust#112474)
- [compiler: update solaris/illumos to enable tsan support.](rust-lang/rust#112039)

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

Libraries
---------
- [Document memory orderings of `thread::{park, unpark}`](rust-lang/rust#99587)
- [io: soften ‘at most one write attempt’ requirement in io::Write::write](rust-lang/rust#107200)
- [Specify behavior of HashSet::insert](rust-lang/rust#107619)
- [Relax implicit `T: Sized` bounds on `BufReader<T>`, `BufWriter<T>` and `LineWriter<T>`](rust-lang/rust#111074)
- [Update runtime guarantee for `select_nth_unstable`](rust-lang/rust#111974)
- [Return `Ok` on kill if process has already exited](rust-lang/rust#112594)
- [Implement PartialOrd for `Vec`s over different allocators](rust-lang/rust#112632)
- [Use 128 bits for TypeId hash](rust-lang/rust#109953)
- [Don't drain-on-drop in DrainFilter impls of various collections.](rust-lang/rust#104455)
- [Make `{Arc,Rc,Weak}::ptr_eq` ignore pointer metadata](rust-lang/rust#106450)

Rustdoc
-------
- [Allow whitespace as path separator like double colon](rust-lang/rust#108537)
- [Add search result item types after their name](rust-lang/rust#110688)
- [Search for slices and arrays by type with `[]`](rust-lang/rust#111958)
- [Clean up type unification and "unboxing"](rust-lang/rust#112233)

Stabilized APIs
---------------
- [`impl<T: Send> Sync for mpsc::Sender<T>`](https://doc.rust-lang.org/nightly/std/sync/mpsc/struct.Sender.html#impl-Sync-for-Sender%3CT%3E)
- [`impl TryFrom<&OsStr> for &str`](https://doc.rust-lang.org/nightly/std/primitive.str.html#impl-TryFrom%3C%26'a+OsStr%3E-for-%26'a+str)
- [`String::leak`](https://doc.rust-lang.org/nightly/alloc/string/struct.String.html#method.leak)

These APIs are now stable in const contexts:

- [`CStr::from_bytes_with_nul`](https://doc.rust-lang.org/nightly/std/ffi/struct.CStr.html#method.from_bytes_with_nul)
- [`CStr::to_bytes`](https://doc.rust-lang.org/nightly/std/ffi/struct.CStr.html#method.from_bytes_with_nul)
- [`CStr::to_bytes_with_nul`](https://doc.rust-lang.org/nightly/std/ffi/struct.CStr.html#method.from_bytes_with_nul)
- [`CStr::to_str`](https://doc.rust-lang.org/nightly/std/ffi/struct.CStr.html#method.from_bytes_with_nul)

Cargo
-----
- Enable `-Zdoctest-in-workspace` by default. When running each documentation
  test, the working directory is set to the root directory of the package the
  test belongs to.
  [docs](https://doc.rust-lang.org/nightly/cargo/commands/cargo-test.html#working-directory-of-tests)
  [#12221](rust-lang/cargo#12221)
  [#12288](rust-lang/cargo#12288)
- Add support of the "default" keyword to reset previously set `build.jobs`
  parallelism back to the default.
  [#12222](rust-lang/cargo#12222)

Compatibility Notes
-------------------
- [Alter `Display` for `Ipv6Addr` for IPv4-compatible addresses](rust-lang/rust#112606)
- Cargo changed feature name validation check to a hard error. The warning was
  added in Rust 1.49. These extended characters aren't allowed on crates.io, so
  this should only impact users of other registries, or people who don't publish
  to a registry.
  [#12291](rust-lang/cargo#12291)

Refreshed patches.

Signed-off-by: Tianling Shen <cnsztl@immortalwrt.org>
(cherry picked from commit 846ee0b)
Signed-off-by: Jeffery To <jeffery.to@gmail.com>
wip-sync pushed a commit to NetBSD/pkgsrc-wip that referenced this pull request Sep 24, 2023
Pkgsrc changes:
 * Adjust patches and cargo checksums to new versions.

Upstream changes:

Version 1.72.0 (2023-08-24)
==========================

Language
--------

- [Replace const eval limit by a lint and add an exponential backoff warning]
  (rust-lang/rust#103877)
- [expand: Change how `#![cfg(FALSE)]` behaves on crate root]
  (rust-lang/rust#110141)
- [Stabilize inline asm for LoongArch64]
  (rust-lang/rust#111235)
- [Uplift `clippy::undropped_manually_drops` lint]
  (rust-lang/rust#111530)
- [Uplift `clippy::invalid_utf8_in_unchecked` lint]
  (rust-lang/rust#111543)
- [Uplift `clippy::cast_ref_to_mut` lint]
  (rust-lang/rust#111567)
- [Uplift `clippy::cmp_nan` lint]
  (rust-lang/rust#111818)
- [resolve: Remove artificial import ambiguity errors]
  (rust-lang/rust#112086)
- [Don't require associated types with Self: Sized bounds in `dyn
  Trait` objects]
  (rust-lang/rust#112319)

Compiler
--------

- [Remember names of `cfg`-ed out items to mention them in diagnostics]
  (rust-lang/rust#109005)
- [Support for native WASM exceptions]
  (rust-lang/rust#111322)
- [Add support for NetBSD/aarch64-be (big-endian arm64).]
  (rust-lang/rust#111326)
- [Write to stdout if `-` is given as output file]
  (rust-lang/rust#111626)
- [Force all native libraries to be statically linked when linking
  a static binary]
  (rust-lang/rust#111698)
- [Add Tier 3 support for `loongarch64-unknown-none*`]
  (rust-lang/rust#112310)
- [Prevent `.eh_frame` from being emitted for `-C panic=abort`]
  (rust-lang/rust#112403)
- [Support 128-bit enum variant in debuginfo codegen]
  (rust-lang/rust#112474)
- [compiler: update solaris/illumos to enable tsan support.]
  (rust-lang/rust#112039)

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

Libraries
---------

- [Document memory orderings of `thread::{park, unpark}`]
  (rust-lang/rust#99587)
- [io: soften â<80><98>at most one write attemptâ<80><99>
   requirement in io::Write::write]
  (rust-lang/rust#107200)
- [Specify behavior of HashSet::insert]
  (rust-lang/rust#107619)
- [Relax implicit `T: Sized` bounds on `BufReader<T>`, `BufWriter<T>`
  and `LineWriter<T>`]
  (rust-lang/rust#111074)
- [Update runtime guarantee for `select_nth_unstable`]
  (rust-lang/rust#111974)
- [Return `Ok` on kill if process has already exited]
  (rust-lang/rust#112594)
- [Implement PartialOrd for `Vec`s over different allocators]
  (rust-lang/rust#112632)
- [Use 128 bits for TypeId hash]
  (rust-lang/rust#109953)
- [Don't drain-on-drop in DrainFilter impls of various collections.]
  (rust-lang/rust#104455)
- [Make `{Arc,Rc,Weak}::ptr_eq` ignore pointer metadata]
  (rust-lang/rust#106450)

Rustdoc
-------

- [Allow whitespace as path separator like double colon]
  (rust-lang/rust#108537)
- [Add search result item types after their name]
  (rust-lang/rust#110688)
- [Search for slices and arrays by type with `[]`]
  (rust-lang/rust#111958)
- [Clean up type unification and "unboxing"]
  (rust-lang/rust#112233)

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

- [`impl<T: Send> Sync for mpsc::Sender<T>`]
  (https://doc.rust-lang.org/nightly/std/sync/mpsc/struct.Sender.html#impl-Sync-for-Sender%3CT%3E)
- [`impl TryFrom<&OsStr> for &str`]
  (https://doc.rust-lang.org/nightly/std/primitive.str.html#impl-TryFrom%3C%26'a+OsStr%3E-for-%26'a+str)
- [`String::leak`]
  (https://doc.rust-lang.org/nightly/alloc/string/struct.String.html#method.leak)

These APIs are now stable in const contexts:

- [`CStr::from_bytes_with_nul`]
  (https://doc.rust-lang.org/nightly/std/ffi/struct.CStr.html#method.from_bytes_with_nul)
- [`CStr::to_bytes`]
  (https://doc.rust-lang.org/nightly/std/ffi/struct.CStr.html#method.from_bytes_with_nul)
- [`CStr::to_bytes_with_nul`]
  (https://doc.rust-lang.org/nightly/std/ffi/struct.CStr.html#method.from_bytes_with_nul)
- [`CStr::to_str`]
  (https://doc.rust-lang.org/nightly/std/ffi/struct.CStr.html#method.from_bytes_with_nul)

Cargo
-----

- Enable `-Zdoctest-in-workspace` by default. When running each documentation
  test, the working directory is set to the root directory of the package the
  test belongs to.
  [docs](https://doc.rust-lang.org/nightly/cargo/commands/cargo-test.html#working-directory-of-tests)
  [#12221](rust-lang/cargo#12221)
  [#12288](rust-lang/cargo#12288)
- Add support of the "default" keyword to reset previously set `build.jobs`
  parallelism back to the default.
  [#12222](rust-lang/cargo#12222)

Compatibility Notes
-------------------

- [Alter `Display` for `Ipv6Addr` for IPv4-compatible addresses]
  (rust-lang/rust#112606)
- Cargo changed feature name validation check to a hard error. The
  warning was added in Rust 1.49. These extended characters aren't
  allowed on crates.io, so this should only impact users of other
  registries, or people who don't publish to a registry.
  [#12291](rust-lang/cargo#12291)
lu-zero pushed a commit to domo-iot/packages that referenced this pull request Oct 23, 2023
Version 1.72.0 (2023-08-24)
==========================

Language
--------
- [Replace const eval limit by a lint and add an exponential backoff warning](rust-lang/rust#103877)
- [expand: Change how `#![cfg(FALSE)]` behaves on crate root](rust-lang/rust#110141)
- [Stabilize inline asm for LoongArch64](rust-lang/rust#111235)
- [Uplift `clippy::undropped_manually_drops` lint](rust-lang/rust#111530)
- [Uplift `clippy::invalid_utf8_in_unchecked` lint](rust-lang/rust#111543)
- [Uplift `clippy::cast_ref_to_mut` lint](rust-lang/rust#111567)
- [Uplift `clippy::cmp_nan` lint](rust-lang/rust#111818)
- [resolve: Remove artificial import ambiguity errors](rust-lang/rust#112086)
- [Don't require associated types with Self: Sized bounds in `dyn Trait` objects](rust-lang/rust#112319)

Compiler
--------
- [Remember names of `cfg`-ed out items to mention them in diagnostics](rust-lang/rust#109005)
- [Support for native WASM exceptions](rust-lang/rust#111322)
- [Add support for NetBSD/aarch64-be (big-endian arm64).](rust-lang/rust#111326)
- [Write to stdout if `-` is given as output file](rust-lang/rust#111626)
- [Force all native libraries to be statically linked when linking a static binary](rust-lang/rust#111698)
- [Add Tier 3 support for `loongarch64-unknown-none*`](rust-lang/rust#112310)
- [Prevent `.eh_frame` from being emitted for `-C panic=abort`](rust-lang/rust#112403)
- [Support 128-bit enum variant in debuginfo codegen](rust-lang/rust#112474)
- [compiler: update solaris/illumos to enable tsan support.](rust-lang/rust#112039)

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

Libraries
---------
- [Document memory orderings of `thread::{park, unpark}`](rust-lang/rust#99587)
- [io: soften ‘at most one write attempt’ requirement in io::Write::write](rust-lang/rust#107200)
- [Specify behavior of HashSet::insert](rust-lang/rust#107619)
- [Relax implicit `T: Sized` bounds on `BufReader<T>`, `BufWriter<T>` and `LineWriter<T>`](rust-lang/rust#111074)
- [Update runtime guarantee for `select_nth_unstable`](rust-lang/rust#111974)
- [Return `Ok` on kill if process has already exited](rust-lang/rust#112594)
- [Implement PartialOrd for `Vec`s over different allocators](rust-lang/rust#112632)
- [Use 128 bits for TypeId hash](rust-lang/rust#109953)
- [Don't drain-on-drop in DrainFilter impls of various collections.](rust-lang/rust#104455)
- [Make `{Arc,Rc,Weak}::ptr_eq` ignore pointer metadata](rust-lang/rust#106450)

Rustdoc
-------
- [Allow whitespace as path separator like double colon](rust-lang/rust#108537)
- [Add search result item types after their name](rust-lang/rust#110688)
- [Search for slices and arrays by type with `[]`](rust-lang/rust#111958)
- [Clean up type unification and "unboxing"](rust-lang/rust#112233)

Stabilized APIs
---------------
- [`impl<T: Send> Sync for mpsc::Sender<T>`](https://doc.rust-lang.org/nightly/std/sync/mpsc/struct.Sender.html#impl-Sync-for-Sender%3CT%3E)
- [`impl TryFrom<&OsStr> for &str`](https://doc.rust-lang.org/nightly/std/primitive.str.html#impl-TryFrom%3C%26'a+OsStr%3E-for-%26'a+str)
- [`String::leak`](https://doc.rust-lang.org/nightly/alloc/string/struct.String.html#method.leak)

These APIs are now stable in const contexts:

- [`CStr::from_bytes_with_nul`](https://doc.rust-lang.org/nightly/std/ffi/struct.CStr.html#method.from_bytes_with_nul)
- [`CStr::to_bytes`](https://doc.rust-lang.org/nightly/std/ffi/struct.CStr.html#method.from_bytes_with_nul)
- [`CStr::to_bytes_with_nul`](https://doc.rust-lang.org/nightly/std/ffi/struct.CStr.html#method.from_bytes_with_nul)
- [`CStr::to_str`](https://doc.rust-lang.org/nightly/std/ffi/struct.CStr.html#method.from_bytes_with_nul)

Cargo
-----
- Enable `-Zdoctest-in-workspace` by default. When running each documentation
  test, the working directory is set to the root directory of the package the
  test belongs to.
  [docs](https://doc.rust-lang.org/nightly/cargo/commands/cargo-test.html#working-directory-of-tests)
  [openwrt#12221](rust-lang/cargo#12221)
  [openwrt#12288](rust-lang/cargo#12288)
- Add support of the "default" keyword to reset previously set `build.jobs`
  parallelism back to the default.
  [openwrt#12222](rust-lang/cargo#12222)

Compatibility Notes
-------------------
- [Alter `Display` for `Ipv6Addr` for IPv4-compatible addresses](rust-lang/rust#112606)
- Cargo changed feature name validation check to a hard error. The warning was
  added in Rust 1.49. These extended characters aren't allowed on crates.io, so
  this should only impact users of other registries, or people who don't publish
  to a registry.
  [openwrt#12291](rust-lang/cargo#12291)

Refreshed patches.

Signed-off-by: Tianling Shen <cnsztl@immortalwrt.org>
tarcieri added a commit to RustCrypto/crypto-bigint that referenced this pull request Dec 28, 2023
It has been removed in recent Rust releases, and replaced with a printed
warning:

rust-lang/rust#103877
tarcieri added a commit to RustCrypto/crypto-bigint that referenced this pull request Dec 28, 2023
It has been removed in recent Rust releases, and replaced with a printed
warning:

rust-lang/rust#103877
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
A-const-eval Area: constant evaluation (mir interpretation) A-testsuite Area: The testsuite used to check the correctness of rustc 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. merged-by-bors This PR was explicitly merged by bors. needs-fcp This change is insta-stable, so needs a completed FCP to proceed. relnotes Marks issues that should be documented in the release notes of the next release. S-waiting-on-bors Status: Waiting on bors to run and complete tests. Bors will change the label on completion. T-infra Relevant to the infrastructure team, which will review and decide on the PR/issue. T-lang Relevant to the language team, which will review and decide on the PR/issue.
Projects
None yet