Skip to content

Reenable disabled early syntax gates as future-incompatibility lints - #99935

Merged
bors merged 3 commits into
rust-lang:masterfrom
CAD97:unstable-syntax-lints
Aug 20, 2022
Merged

Reenable disabled early syntax gates as future-incompatibility lints#99935
bors merged 3 commits into
rust-lang:masterfrom
CAD97:unstable-syntax-lints

Conversation

@CAD97

@CAD97CAD97 commented Jul 30, 2022

Copy link
Copy Markdown
Contributor

The approach taken by this PR is

  • Introduce a new lint, unstable_syntax_pre_expansion, and reenable the early syntax gates to emit it
  • Use the diagnostic stashing mechanism to stash warnings the early warnings
  • When the hard error occurs post expansion, steal and cancel the early warning
  • Don't display any stashed warnings if errors are present to avoid the same noise problem that hiding type ascription errors is avoiding

Commits are working commits, but in a coherent steps-to-implement manner. Can be squashed if desired.

The preexisting soft_unstable lint seems like it would've been a good fit, but it is deny-by-default (appropriate for #[bench]) and these gates should be introduced as warn-by-default.

It may be desirable to change the stash mechanism's behavior to not flush lint errors in the presence of other errors either (like is done for warnings here), but upgrading a stash-using lint from warn to error perhaps is enough of a request to see the lint that they shouldn't be hidden; additionally, fixing the last error to get new errors thrown at you always feels bad, so if we know the lint errors are present, we should show them.

Using a new flag/mechanism for a "weak diagnostic" which is suppressed by other errors may also be desirable over assuming any stashed warnings are "weak," but this is the first user of stashing warnings and seems an appropriate use of stashing (it follows the "know more later to refine the diagnostic" pattern; here we learn that it's in a compiled position) so we get to define what it means to stash a non-hard-error diagnostic.

cc @petrochenkov (seconded MCP)

@rustbotrustbot added the T-compiler Relevant to the compiler team, which will review and decide on the PR/issue. label Jul 30, 2022
@rust-highfive

Copy link
Copy Markdown
Contributor

r? @davidtwco

(rust-highfive has picked a reviewer for you, use r? to override)

@rust-highfiverust-highfive added the S-waiting-on-review Status: Awaiting review from the assignee but also interested parties. label Jul 30, 2022
Comment threadcompiler/rustc_errors/src/lib.rs Outdated
Comment threadcompiler/rustc_lint_defs/src/builtin.rs Outdated
@rust-log-analyzer

This comment has been minimized.

@CAD97

Copy link
Copy Markdown
ContributorAuthor

There are crates in the wild built around unstable syntax not being an error, such as #[gat] to polyfill lifetime GATs on stable. However, GATs are not a feature with a disabled gate converted into a warning here. The syntax gates which now warn under #[cfg(FALSE)] are:

  • trait_alias
  • associated_type_bounds
  • decl_macro
  • box_patterns
  • exclusive_range_pattern
  • try_blocks
  • label_break_value
  • box_syntax
  • type_ascription

@CAD97
CAD97force-pushed the unstable-syntax-lints branch from 27f3b7f to 32420afCompareJuly 30, 2022 04:18
@CAD97

CAD97 commented Jul 30, 2022

Copy link
Copy Markdown
ContributorAuthor

This also does not yet revert the reverts of any of the tests reverted in #66004. Re-adding those before merging is probably desirable.

@rust-log-analyzer

This comment has been minimized.

@rust-log-analyzer

This comment has been minimized.

@rust-log-analyzer

This comment has been minimized.

@joshtriplett

Copy link
Copy Markdown
Member

So, there are two separate considerations here:

  1. Existing unstable syntax that's allowed in disabled code, for which it would be a breaking change to make it a hard error.
  2. New unstable syntax, for which we could make it a hard error without breaking any existing code.

It makes sense to add a future-compat lint as the best we can do for (1). But we could potentially do better for new syntax.

I do appreciate wanting to make it easier to have different configurations and use new syntax in some of them.

I'd also like to make sure we don't end up locking in parsing of new syntax that we can no longer change.

@CAD97

Copy link
Copy Markdown
ContributorAuthor

It makes sense to add a future-compat lint as the best we can do for (1). But we could potentially do better for new syntax.

This already is the case for the gates above the changed gate_all! macro here, which are always hard errors, such as yeet_expr. I'll add an extra line to the comments there to make this clearer and say that new syntax gates should be hard, not delayed.

Any work on making cfg'd use of new syntax easier/better/etc is future work; this PR is just to warn on unstable syntaxes that a previous crater run suggested would be minimal impact.

Comment threadcompiler/rustc_lint_defs/src/builtin.rs Outdated
Comment threadcompiler/rustc_ast_passes/src/feature_gate.rs Outdated
@davidtwco

Copy link
Copy Markdown
Member

r? @petrochenkov

@bors

This comment was marked as resolved.

@CAD97
CAD97 marked this pull request as ready for review August 13, 2022 04:47
@CAD97

CAD97 commented Aug 13, 2022

Copy link
Copy Markdown
ContributorAuthor

MCP finalized, marking as no longer a draft. However,

@rustbot author

I need to rebase; will hopefully get to that next week. (It's a trivial rebase for imports, but I still need to set my rustc-compile-capable desktop back up.)

@petrochenkov

Copy link
Copy Markdown
Contributor

r=me after rebase and cleaning up commit history.
@rustbot author

I reviewed the diagnostic stashing part of this PR very lightly, this is the least trivial part of the PR, but I couldn't care less about it.

@rustbotrustbot 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 Aug 13, 2022
@davidtwco

Copy link
Copy Markdown
Member

I reviewed the diagnostic stashing part of this PR very lightly, this is the least trivial part of the PR, but I couldn't care less about it.

This part seems reasonable to me.

@petrochenkov

Copy link
Copy Markdown
Contributor

@bors r+

@bors

bors commented Aug 17, 2022

Copy link
Copy Markdown
Collaborator

📌 Commit 944c6b6 has been approved by petrochenkov

It is now in the queue for this repository.

@borsbors 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 Aug 17, 2022
Dylan-DPC added a commit to Dylan-DPC/rust that referenced this pull request Aug 20, 2022
…ochenkov
Reenable disabled early syntax gates as future-incompatibility lints
- MCP: rust-lang/compiler-team#535
The approach taken by this PR is
- Introduce a new lint, `unstable_syntax_pre_expansion`, and reenable the early syntax gates to emit it
- Use the diagnostic stashing mechanism to stash warnings the early warnings
- When the hard error occurs post expansion, steal and cancel the early warning
- Don't display any stashed warnings if errors are present to avoid the same noise problem that hiding type ascription errors is avoiding
Commits are working commits, but in a coherent steps-to-implement manner. Can be squashed if desired.
The preexisting `soft_unstable` lint seems like it would've been a good fit, but it is deny-by-default (appropriate for `#[bench]`) and these gates should be introduced as warn-by-default.
It may be desirable to change the stash mechanism's behavior to not flush lint errors in the presence of other errors either (like is done for warnings here), but upgrading a stash-using lint from warn to error perhaps is enough of a request to see the lint that they shouldn't be hidden; additionally, fixing the last error to get new errors thrown at you always feels bad, so if we know the lint errors are present, we should show them.
Using a new flag/mechanism for a "weak diagnostic" which is suppressed by other errors may also be desirable over assuming any stashed warnings are "weak," but this is the first user of stashing warnings and seems an appropriate use of stashing (it follows the "know more later to refine the diagnostic" pattern; here we learn that it's in a compiled position) so we get to define what it means to stash a non-hard-error diagnostic.
cc `@petrochenkov` (seconded MCP)
@Dylan-DPCDylan-DPC mentioned this pull request Aug 20, 2022
matthiaskrgr added a commit to matthiaskrgr/rust that referenced this pull request Aug 20, 2022
…ochenkov
Reenable disabled early syntax gates as future-incompatibility lints
- MCP: rust-lang/compiler-team#535
The approach taken by this PR is
- Introduce a new lint, `unstable_syntax_pre_expansion`, and reenable the early syntax gates to emit it
- Use the diagnostic stashing mechanism to stash warnings the early warnings
- When the hard error occurs post expansion, steal and cancel the early warning
- Don't display any stashed warnings if errors are present to avoid the same noise problem that hiding type ascription errors is avoiding
Commits are working commits, but in a coherent steps-to-implement manner. Can be squashed if desired.
The preexisting `soft_unstable` lint seems like it would've been a good fit, but it is deny-by-default (appropriate for `#[bench]`) and these gates should be introduced as warn-by-default.
It may be desirable to change the stash mechanism's behavior to not flush lint errors in the presence of other errors either (like is done for warnings here), but upgrading a stash-using lint from warn to error perhaps is enough of a request to see the lint that they shouldn't be hidden; additionally, fixing the last error to get new errors thrown at you always feels bad, so if we know the lint errors are present, we should show them.
Using a new flag/mechanism for a "weak diagnostic" which is suppressed by other errors may also be desirable over assuming any stashed warnings are "weak," but this is the first user of stashing warnings and seems an appropriate use of stashing (it follows the "know more later to refine the diagnostic" pattern; here we learn that it's in a compiled position) so we get to define what it means to stash a non-hard-error diagnostic.
cc ``@petrochenkov`` (seconded MCP)
matthiaskrgr added a commit to matthiaskrgr/rust that referenced this pull request Aug 20, 2022
…ochenkov
Reenable disabled early syntax gates as future-incompatibility lints
- MCP: rust-lang/compiler-team#535
The approach taken by this PR is
- Introduce a new lint, `unstable_syntax_pre_expansion`, and reenable the early syntax gates to emit it
- Use the diagnostic stashing mechanism to stash warnings the early warnings
- When the hard error occurs post expansion, steal and cancel the early warning
- Don't display any stashed warnings if errors are present to avoid the same noise problem that hiding type ascription errors is avoiding
Commits are working commits, but in a coherent steps-to-implement manner. Can be squashed if desired.
The preexisting `soft_unstable` lint seems like it would've been a good fit, but it is deny-by-default (appropriate for `#[bench]`) and these gates should be introduced as warn-by-default.
It may be desirable to change the stash mechanism's behavior to not flush lint errors in the presence of other errors either (like is done for warnings here), but upgrading a stash-using lint from warn to error perhaps is enough of a request to see the lint that they shouldn't be hidden; additionally, fixing the last error to get new errors thrown at you always feels bad, so if we know the lint errors are present, we should show them.
Using a new flag/mechanism for a "weak diagnostic" which is suppressed by other errors may also be desirable over assuming any stashed warnings are "weak," but this is the first user of stashing warnings and seems an appropriate use of stashing (it follows the "know more later to refine the diagnostic" pattern; here we learn that it's in a compiled position) so we get to define what it means to stash a non-hard-error diagnostic.
cc ```@petrochenkov``` (seconded MCP)
matthiaskrgr added a commit to matthiaskrgr/rust that referenced this pull request Aug 20, 2022
…ochenkov
Reenable disabled early syntax gates as future-incompatibility lints
- MCP: rust-lang/compiler-team#535
The approach taken by this PR is
- Introduce a new lint, `unstable_syntax_pre_expansion`, and reenable the early syntax gates to emit it
- Use the diagnostic stashing mechanism to stash warnings the early warnings
- When the hard error occurs post expansion, steal and cancel the early warning
- Don't display any stashed warnings if errors are present to avoid the same noise problem that hiding type ascription errors is avoiding
Commits are working commits, but in a coherent steps-to-implement manner. Can be squashed if desired.
The preexisting `soft_unstable` lint seems like it would've been a good fit, but it is deny-by-default (appropriate for `#[bench]`) and these gates should be introduced as warn-by-default.
It may be desirable to change the stash mechanism's behavior to not flush lint errors in the presence of other errors either (like is done for warnings here), but upgrading a stash-using lint from warn to error perhaps is enough of a request to see the lint that they shouldn't be hidden; additionally, fixing the last error to get new errors thrown at you always feels bad, so if we know the lint errors are present, we should show them.
Using a new flag/mechanism for a "weak diagnostic" which is suppressed by other errors may also be desirable over assuming any stashed warnings are "weak," but this is the first user of stashing warnings and seems an appropriate use of stashing (it follows the "know more later to refine the diagnostic" pattern; here we learn that it's in a compiled position) so we get to define what it means to stash a non-hard-error diagnostic.
cc ````@petrochenkov```` (seconded MCP)
bors added a commit to rust-lang-ci/rust that referenced this pull request Aug 20, 2022
…iaskrgr
Rollup of 9 pull requests
Successful merges:
- rust-lang#97963 (net listen backlog set to negative on Linux.)
- rust-lang#99935 (Reenable disabled early syntax gates as future-incompatibility lints)
- rust-lang#100129 (add miri-test-libstd support to libstd)
- rust-lang#100500 (Ban references to `Self` in trait object substs for projection predicates too.)
- rust-lang#100636 (Revert "Revert "Allow dynamic linking for iOS/tvOS targets."")
- rust-lang#100718 ([rustdoc] Fix item info display)
- rust-lang#100769 (Suggest adding a reference to a trait assoc item)
- rust-lang#100777 (elaborate how revisions work with FileCheck stuff in src/test/codegen)
- rust-lang#100796 (Refactor: remove unnecessary string searchings)
Failed merges:
r? `@ghost`
`@rustbot` modify labels: rollup
@bors
bors merged commit 8828af4 into rust-lang:masterAug 20, 2022
@rustbotrustbot added this to the 1.65.0 milestone Aug 20, 2022
@CAD97
CAD97 deleted the unstable-syntax-lints branch August 20, 2022 23:12
fn or_patterns() {
// Top level of `let`:
let (| A | B);
let (A | B);

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

Just looked at this change list again since it was linked and these slipped in (presumably from fmt-on-save) and shouldn't've.

wip-sync pushed a commit to NetBSD/pkgsrc-wip that referenced this pull request Nov 27, 2022
Pkgsrc changes:
* We now manage to build for mipsel-unknown-netbsd, but despite the
target spec saying cpu = "mips3", the compiler manages to emit 64-bit
instructions which cause "illegal instruction" error. Will need more
work. The mipsel-unknown-netbsd entry is commentd out since there
is no 1.64.0 bootstrap.
* Managed to retain the build of aarch64_be, llvm needed a patch to
avoid use of neon instructions in the BE case (llvm doesn't support
use of neon in BE mode). Ref. patch to
src/llvm-project/llvm/lib/Support/BLAKE3/blake3_impl.h.
* The minimum gcc version is now 7.x, and that includes the cross-compiler
for the targets. For i386 this also needs to /usr/include/gcc-7 include
files in the target root, because immintrin.h from gcc 5 is not
compatible with gcc 7.x. This applies for the targets where we build
against a root from netbsd-8 (sparc64, powerpc, i386), and files/gcc-wrap
gets a hack for this.
* Pick up tweak for -latomic inclusion from
rust-lang/rust#104220
and
rust-lang/rust#104572
* Retain ability to do 32-bit NetBSD, by changing from 64 to 32 bit
types in library/std/src/sys/unix/thread_parker/netbsd.rs.
* I've struggled a bit to get the "openssl-src" build with -latomic
where it's needed. I introduce "NetBSD-generic32" system type and
use it for the NetBSD mipsel target. There is another attempt to
do the same in the patch to vendor/openssl-sys/build/main.rs.
* Bump bootstraps to 1.64.0, checksum updates.
Upstream changes:
Version 1.65.0 (2022-11-03)
==========================
Language
--------
- [Error on `as` casts of enums with `#[non_exhaustive]` variants]
(rust-lang/rust#92744)
- [Stabilize `let else`](rust-lang/rust#93628)
- [Stabilize generic associated types (GATs)]
(rust-lang/rust#96709)
- [Add lints `let_underscore_drop`, `let_underscore_lock`, and
`let_underscore_must_use` from Clippy]
(rust-lang/rust#97739)
- [Stabilize `break`ing from arbitrary labeled blocks ("label-break-value")]
(rust-lang/rust#99332)
- [Uninitialized integers, floats, and raw pointers are now considered
immediate UB](rust-lang/rust#98919).
Usage of `MaybeUninit` is the correct way to work with uninitialized
memory.
- [Stabilize raw-dylib for Windows x86_64, aarch64, and thumbv7a]
(rust-lang/rust#99916)
- [Do not allow `Drop` impl on foreign ADTs]
(rust-lang/rust#99576)
Compiler
--------
- [Stabilize -Csplit-debuginfo on Linux]
(rust-lang/rust#98051)
- [Use niche-filling optimization even when multiple variants have
data] (rust-lang/rust#94075)
- [Associated type projections are now verified to be well-formed
prior to resolving the underlying type]
(rust-lang/rust#99217)
- [Stringify non-shorthand visibility correctly]
(rust-lang/rust#100350)
- [Normalize struct field types when unsizing]
(rust-lang/rust#101831)
- [Update to LLVM 15](rust-lang/rust#99464)
- [Fix aarch64 call abi to correctly zeroext when needed]
(rust-lang/rust#97800)
- [debuginfo: Generalize C++-like encoding for enums]
(rust-lang/rust#98393)
- [Add `special_module_name` lint]
(rust-lang/rust#94467)
- [Add support for generating unique profraw files by default when
using `-C instrument-coverage`]
(rust-lang/rust#100384)
- [Allow dynamic linking for iOS/tvOS targets]
(rust-lang/rust#100636)
New targets:
- [Add armv4t-none-eabi as a tier 3 target]
(rust-lang/rust#100244)
- [Add powerpc64-unknown-openbsd and riscv64-unknown-openbsd as tier 3 targets]
(rust-lang/rust#101025)
- Refer to Rust's [platform support page][platform-support-doc] for more
information on Rust's tiered platform support.
Libraries
---------
- [Don't generate `PartialEq::ne` in derive(PartialEq)]
(rust-lang/rust#98655)
- [Windows RNG: Use `BCRYPT_RNG_ALG_HANDLE` by default]
(rust-lang/rust#101325)
- [Forbid mixing `System` with direct system allocator calls]
(rust-lang/rust#101394)
- [Document no support for writing to non-blocking stdio/stderr]
(rust-lang/rust#101416)
- [`std::layout::Layout` size must not overflow `isize::MAX` when
rounded up to `align`](rust-lang/rust#95295)
This also changes the safety conditions on
`Layout::from_size_align_unchecked`.
Stabilized APIs
---------------
- [`std::backtrace::Backtrace`]
(https://doc.rust-lang.org/stable/std/backtrace/struct.Backtrace.html)
- [`Bound::as_ref`]
(https://doc.rust-lang.org/stable/std/ops/enum.Bound.html#method.as_ref)
- [`std::io::read_to_string`]
(https://doc.rust-lang.org/stable/std/io/fn.read_to_string.html)
- [`<*const T>::cast_mut`]
(https://doc.rust-lang.org/stable/std/primitive.pointer.html#method.cast_mut)
- [`<*mut T>::cast_const`]
(https://doc.rust-lang.org/stable/std/primitive.pointer.html#method.cast_const)
These APIs are now stable in const contexts:
- [`<*const T>::offset_from`]
(https://doc.rust-lang.org/stable/std/primitive.pointer.html#method.offset_from)
- [`<*mut T>::offset_from`]
(https://doc.rust-lang.org/stable/std/primitive.pointer.html#method.offset_from)
Cargo
-----
- [Apply GitHub fast path even for partial hashes]
(rust-lang/cargo#10807)
- [Do not add home bin path to PATH if it's already there]
(rust-lang/cargo#11023)
- [Take priority into account within the pending queue]
(rust-lang/cargo#11032).
This slightly optimizes job scheduling by Cargo, with typically
small improvements on larger crate graph builds.
Compatibility Notes
-------------------
- [`std::layout::Layout` size must not overflow `isize::MAX` when
rounded up to `align`] (rust-lang/rust#95295).
This also changes the safety conditions on
`Layout::from_size_align_unchecked`.
- [`PollFn` now only implements `Unpin` if the closure is `Unpin`]
(rust-lang/rust#102737).
This is a possible breaking change if users were relying on the
blanket unpin implementation. See discussion on the PR for
details of why this change was made.
- [Drop ExactSizeIterator impl from std::char::EscapeAscii]
(rust-lang/rust#99880)
This is a backwards-incompatible change to the standard library's
surface area, but is unlikely to affect real world usage.
- [Do not consider a single repeated lifetime eligible for elision
in the return type] (rust-lang/rust#103450)
This behavior was unintentionally changed in 1.64.0, and this
release reverts that change by making this an error again.
- [Reenable disabled early syntax gates as future-incompatibility
lints] (rust-lang/rust#99935)
- [Update the minimum external LLVM to 13]
(rust-lang/rust#100460)
- [Don't duplicate file descriptors into stdio fds]
(rust-lang/rust#101426)
- [Sunset RLS](rust-lang/rust#100863)
- [Deny usage of `#![cfg_attr(..., crate_type = ...)]` to set the
crate type] (rust-lang/rust#99784)
This strengthens the forward compatibility lint
deprecated_cfg_attr_crate_type_name to deny.
- [`llvm-has-rust-patches` allows setting the build system to treat
the LLVM as having Rust-specific patches]
(rust-lang/rust#101072)
This option may need to be set for distributions that are building
Rust with a patched LLVM via `llvm-config`, not the built-in
LLVM.
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.
- [Add `x.sh` and `x.ps1` shell scripts]
(rust-lang/rust#99992)
- [compiletest: use target cfg instead of hard-coded tables]
(rust-lang/rust#100260)
- [Use object instead of LLVM for reading bitcode from rlibs]
(rust-lang/rust#98100)
- [Enable MIR inlining for optimized compilations]
(rust-lang/rust#91743)
This provides a 3-10% improvement in compiletimes for real world
crates. See [perf results]
(https://perf.rust-lang.org/compare.html?start=aedf78e56b2279cc869962feac5153b6ba7001ed&end=0075bb4fad68e64b6d1be06bf2db366c30bc75e1&stat=instructions:u).
netbsd-srcmastr pushed a commit to NetBSD/pkgsrc that referenced this pull request Jan 23, 2023
Pkgsrc changes:
* pkglint cleanups, bump bootstrap kits to 1.65.0.
* New target: mipsel-unknown-netbsd, for cpu=mips32 with soft-float.
* Managed to retain the build of aarch64_be, llvm needed a patch to
avoid use of neon instructions in the BE case (llvm doesn't support
use of neon in BE mode). Ref. patch to
src/llvm-project/llvm/lib/Support/BLAKE3/blake3_impl.h.
Also submitted upstream of LLVM to the BLAKE3 maintainers.
* The minimum gcc version is now 7.x, and that includes the
cross-compiler for the targets. For i386 this also needs to
/usr/include/gcc-7 include files in the target root, because
immintrin.h from gcc 5 is not compatible with gcc 7.x. This
applies for the targets where we build against a root from netbsd-8
(sparc64, powerpc, i386), and files/gcc-wrap gets a hack for this.
* Pick up tweak for -latomic inclusion from
rust-lang/rust#104220
and
rust-lang/rust#104572
* Retain ability to do 32-bit NetBSD, by changing from 64 to 32 bit
types in library/std/src/sys/unix/thread_parker/netbsd.rs.
* I've tried to get the "openssl-src" build with -latomic where it's
needed. I've introduced the "NetBSD-generic32" system type and use
it for the NetBSD mipsel target. There is another attempt to do
the same in the patch to vendor/openssl-sys/build/main.rs.
Upstream changes:
Version 1.66.1 (2023-01-10)
===========================
- Added validation of SSH host keys for git URLs in Cargo
([CVE-2022-46176](https://www.cve.org/CVERecord?id=CVE-2022-46176))
Version 1.66.0 (2022-12-15)
===========================
Language
--------
- [Permit specifying explicit discriminants on all `repr(Int)`
enums](rust-lang/rust#95710)
```rust
#[repr(u8)]
enum Foo {
A(u8) = 0,
B(i8) = 1,
C(bool) = 42,
}
```
- [Allow transmutes between the same type differing only in
lifetimes](rust-lang/rust#101520)
- [Change constant evaluation errors from a deny-by-default lint to a
hard error](rust-lang/rust#102091)
- [Trigger `must_use` on `impl Trait` for
supertraits](rust-lang/rust#102287) This
makes `impl ExactSizeIterator` respect the existing `#[must_use]`
annotation on `Iterator`.
- [Allow `..X` and `..=X` in
patterns](rust-lang/rust#102275)
- [Uplift `clippy::for_loops_over_fallibles` lint into
rustc](rust-lang/rust#99696)
- [Stabilize `sym` operands in inline
assembly](rust-lang/rust#103168)
- [Update to Unicode 15](rust-lang/rust#101912)
- [Opaque types no longer imply lifetime
bounds](rust-lang/rust#95474) This is a
soundness fix which may break code that was erroneously relying on this
behavior.
Compiler
--------
- [Add armv5te-none-eabi and thumbv5te-none-eabi tier 3
targets](rust-lang/rust#101329)
- Refer to Rust's [platform support page][platform-support-doc] for
more information on Rust's tiered platform support.
- [Add support for linking against macOS universal
libraries](rust-lang/rust#98736)
Libraries
---------
- [Fix `#[derive(Default)]` on a generic `#[default]` enum adding
unnecessary `Default`
bounds](rust-lang/rust#101040)
- [Update to Unicode 15](rust-lang/rust#101821)
Stabilized APIs
---------------
- [`proc_macro::Span::source_text`](https://doc.rust-lang.org/stable/proc_macro/struct.Span.html#method.source_text)
- [`uX::{checked_add_signed, overflowing_add_signed,
saturating_add_signed,
wrapping_add_signed}`](https://doc.rust-lang.org/stable/std/primitive.u8.html#method.checked_add_signed)
- [`iX::{checked_add_unsigned, overflowing_add_unsigned,
saturating_add_unsigned,
wrapping_add_unsigned}`](https://doc.rust-lang.org/stable/std/primitive.i8.html#method.checked_add_unsigned)
- [`iX::{checked_sub_unsigned, overflowing_sub_unsigned,
saturating_sub_unsigned,
wrapping_sub_unsigned}`](https://doc.rust-lang.org/stable/std/primitive.i8.html#method.checked_sub_unsigned)
- [`BTreeSet::{first, last, pop_first,
pop_last}`](https://doc.rust-lang.org/stable/std/collections/struct.BTreeSet.html#method.first)
- [`BTreeMap::{first_key_value, last_key_value, first_entry, last_entry,
pop_first,
pop_last}`](https://doc.rust-lang.org/stable/std/collections/struct.BTreeMap.html#method.first_key_value)
- [Add `AsFd` implementations for stdio lock types on
WASI.](rust-lang/rust#101768)
- [`impl TryFrom<Vec<T>> for Box<[T;
N]>`](https://doc.rust-lang.org/stable/std/boxed/struct.Box.html#impl-TryFrom%3CVec%3CT%2C%20Global%3E%3E-for-Box%3C%5BT%3B%20N%5D%2C%20Global%3E)
- [`core::hint::black_box`](https://doc.rust-lang.org/stable/std/hint/fn.black_box.html)
- [`Duration::try_from_secs_{f32,f64}`](https://doc.rust-lang.org/stable/std/time/struct.Duration.html#method.try_from_secs_f32)
- [`Option::unzip`](https://doc.rust-lang.org/stable/std/option/enum.Option.html#method.unzip)
- [`std::os::fd`](https://doc.rust-lang.org/stable/std/os/fd/index.html)
Rustdoc
-------
- [Add Rustdoc warning for invalid HTML tags in the
documentation](rust-lang/rust#101720)
Cargo
-----
- [Added `cargo remove` to remove dependencies from
Cargo.toml](https://doc.rust-lang.org/nightly/cargo/commands/cargo-remove.html)
- [`cargo publish` now waits for the new version to be downloadable
before exiting](rust-lang/cargo#11062)
See [detailed release notes](https://github.com/rust-lang/cargo/blob/master/CHANGELOG.md#cargo-166-2022-12-15) for more.
Compatibility Notes
-------------------
- [Only apply `ProceduralMasquerade` hack to older versions of
`rental`](rust-lang/rust#94063)
- [Don't export `__heap_base` and `__data_end` on
wasm32-wasi.](rust-lang/rust#102385)
- [Don't export `__wasm_init_memory` on
WebAssembly.](rust-lang/rust#102426)
- [Only export `__tls_*` on
wasm32-unknown-unknown.](rust-lang/rust#102440)
- [Don't link to `libresolv` in libstd on
Darwin](rust-lang/rust#102766)
- [Update libstd's libc to 0.2.135 (to make `libstd` no longer pull in
`libiconv.dylib` on
Darwin)](rust-lang/rust#103277)
- [Opaque types no longer imply lifetime
bounds](rust-lang/rust#95474)
This is a soundness fix which may break code that was erroneously
relying on this behavior.
- [Make `order_dependent_trait_objects` show up in future-breakage
reports](rust-lang/rust#102635)
- [Change std::process::Command spawning to default to inheriting the
parent's signal mask](rust-lang/rust#101077)
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.
- [Enable BOLT for LLVM
compilation](rust-lang/rust#94381)
- [Enable LTO for
rustc_driver.so](rust-lang/rust#101403)
Version 1.65.0 (2022-11-03)
==========================
Language
--------
- [Error on `as` casts of enums with `#[non_exhaustive]` variants]
(rust-lang/rust#92744)
- [Stabilize `let else`](rust-lang/rust#93628)
- [Stabilize generic associated types (GATs)]
(rust-lang/rust#96709)
- [Add lints `let_underscore_drop`, `let_underscore_lock`, and
`let_underscore_must_use` from Clippy]
(rust-lang/rust#97739)
- [Stabilize `break`ing from arbitrary labeled blocks ("label-break-value")]
(rust-lang/rust#99332)
- [Uninitialized integers, floats, and raw pointers are now considered
immediate UB](rust-lang/rust#98919).
Usage of `MaybeUninit` is the correct way to work with uninitialized
memory.
- [Stabilize raw-dylib for Windows x86_64, aarch64, and thumbv7a]
(rust-lang/rust#99916)
- [Do not allow `Drop` impl on foreign ADTs]
(rust-lang/rust#99576)
Compiler
--------
- [Stabilize -Csplit-debuginfo on Linux]
(rust-lang/rust#98051)
- [Use niche-filling optimization even when multiple variants have
data] (rust-lang/rust#94075)
- [Associated type projections are now verified to be well-formed
prior to resolving the underlying type]
(rust-lang/rust#99217)
- [Stringify non-shorthand visibility correctly]
(rust-lang/rust#100350)
- [Normalize struct field types when unsizing]
(rust-lang/rust#101831)
- [Update to LLVM 15](rust-lang/rust#99464)
- [Fix aarch64 call abi to correctly zeroext when needed]
(rust-lang/rust#97800)
- [debuginfo: Generalize C++-like encoding for enums]
(rust-lang/rust#98393)
- [Add `special_module_name` lint]
(rust-lang/rust#94467)
- [Add support for generating unique profraw files by default when
using `-C instrument-coverage`]
(rust-lang/rust#100384)
- [Allow dynamic linking for iOS/tvOS targets]
(rust-lang/rust#100636)
New targets:
- [Add armv4t-none-eabi as a tier 3 target]
(rust-lang/rust#100244)
- [Add powerpc64-unknown-openbsd and riscv64-unknown-openbsd as tier 3 targets]
(rust-lang/rust#101025)
- Refer to Rust's [platform support page][platform-support-doc] for more
information on Rust's tiered platform support.
Libraries
---------
- [Don't generate `PartialEq::ne` in derive(PartialEq)]
(rust-lang/rust#98655)
- [Windows RNG: Use `BCRYPT_RNG_ALG_HANDLE` by default]
(rust-lang/rust#101325)
- [Forbid mixing `System` with direct system allocator calls]
(rust-lang/rust#101394)
- [Document no support for writing to non-blocking stdio/stderr]
(rust-lang/rust#101416)
- [`std::layout::Layout` size must not overflow `isize::MAX` when
rounded up to `align`](rust-lang/rust#95295)
This also changes the safety conditions on
`Layout::from_size_align_unchecked`.
Stabilized APIs
---------------
- [`std::backtrace::Backtrace`]
(https://doc.rust-lang.org/stable/std/backtrace/struct.Backtrace.html)
- [`Bound::as_ref`]
(https://doc.rust-lang.org/stable/std/ops/enum.Bound.html#method.as_ref)
- [`std::io::read_to_string`]
(https://doc.rust-lang.org/stable/std/io/fn.read_to_string.html)
- [`<*const T>::cast_mut`]
(https://doc.rust-lang.org/stable/std/primitive.pointer.html#method.cast_mut)
- [`<*mut T>::cast_const`]
(https://doc.rust-lang.org/stable/std/primitive.pointer.html#method.cast_const)
These APIs are now stable in const contexts:
- [`<*const T>::offset_from`]
(https://doc.rust-lang.org/stable/std/primitive.pointer.html#method.offset_from)
- [`<*mut T>::offset_from`]
(https://doc.rust-lang.org/stable/std/primitive.pointer.html#method.offset_from)
Cargo
-----
- [Apply GitHub fast path even for partial hashes]
(rust-lang/cargo#10807)
- [Do not add home bin path to PATH if it's already there]
(rust-lang/cargo#11023)
- [Take priority into account within the pending queue]
(rust-lang/cargo#11032).
This slightly optimizes job scheduling by Cargo, with typically
small improvements on larger crate graph builds.
Compatibility Notes
-------------------
- [`std::layout::Layout` size must not overflow `isize::MAX` when
rounded up to `align`] (rust-lang/rust#95295).
This also changes the safety conditions on
`Layout::from_size_align_unchecked`.
- [`PollFn` now only implements `Unpin` if the closure is `Unpin`]
(rust-lang/rust#102737).
This is a possible breaking change if users were relying on the
blanket unpin implementation. See discussion on the PR for
details of why this change was made.
- [Drop ExactSizeIterator impl from std::char::EscapeAscii]
(rust-lang/rust#99880)
This is a backwards-incompatible change to the standard library's
surface area, but is unlikely to affect real world usage.
- [Do not consider a single repeated lifetime eligible for elision
in the return type] (rust-lang/rust#103450)
This behavior was unintentionally changed in 1.64.0, and this
release reverts that change by making this an error again.
- [Reenable disabled early syntax gates as future-incompatibility
lints] (rust-lang/rust#99935)
- [Update the minimum external LLVM to 13]
(rust-lang/rust#100460)
- [Don't duplicate file descriptors into stdio fds]
(rust-lang/rust#101426)
- [Sunset RLS](rust-lang/rust#100863)
- [Deny usage of `#![cfg_attr(..., crate_type = ...)]` to set the
crate type] (rust-lang/rust#99784)
This strengthens the forward compatibility lint
deprecated_cfg_attr_crate_type_name to deny.
- [`llvm-has-rust-patches` allows setting the build system to treat
the LLVM as having Rust-specific patches]
(rust-lang/rust#101072)
This option may need to be set for distributions that are building
Rust with a patched LLVM via `llvm-config`, not the built-in
LLVM.
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.
- [Add `x.sh` and `x.ps1` shell scripts]
(rust-lang/rust#99992)
- [compiletest: use target cfg instead of hard-coded tables]
(rust-lang/rust#100260)
- [Use object instead of LLVM for reading bitcode from rlibs]
(rust-lang/rust#98100)
- [Enable MIR inlining for optimized compilations]
(rust-lang/rust#91743)
This provides a 3-10% improvement in compiletimes for real world
crates. See [perf results]
(https://perf.rust-lang.org/compare.html?start=aedf78e56b2279cc869962feac5153b6ba7001ed&end=0075bb4fad68e64b6d1be06bf2db366c30bc75e1&stat=instructions:u).
@est31est31 mentioned this pull request Feb 26, 2023
msk pushed a commit to msk/pkgsrc that referenced this pull request May 11, 2026
Pkgsrc changes:
* pkglint cleanups, bump bootstrap kits to 1.65.0.
* New target: mipsel-unknown-netbsd, for cpu=mips32 with soft-float.
* Managed to retain the build of aarch64_be, llvm needed a patch to
avoid use of neon instructions in the BE case (llvm doesn't support
use of neon in BE mode). Ref. patch to
src/llvm-project/llvm/lib/Support/BLAKE3/blake3_impl.h.
Also submitted upstream of LLVM to the BLAKE3 maintainers.
* The minimum gcc version is now 7.x, and that includes the
cross-compiler for the targets. For i386 this also needs to
/usr/include/gcc-7 include files in the target root, because
immintrin.h from gcc 5 is not compatible with gcc 7.x. This
applies for the targets where we build against a root from netbsd-8
(sparc64, powerpc, i386), and files/gcc-wrap gets a hack for this.
* Pick up tweak for -latomic inclusion from
rust-lang/rust#104220
and
rust-lang/rust#104572
* Retain ability to do 32-bit NetBSD, by changing from 64 to 32 bit
types in library/std/src/sys/unix/thread_parker/netbsd.rs.
* I've tried to get the "openssl-src" build with -latomic where it's
needed. I've introduced the "NetBSD-generic32" system type and use
it for the NetBSD mipsel target. There is another attempt to do
the same in the patch to vendor/openssl-sys/build/main.rs.
Upstream changes:
Version 1.66.1 (2023-01-10)
===========================
- Added validation of SSH host keys for git URLs in Cargo
([CVE-2022-46176](https://www.cve.org/CVERecord?id=CVE-2022-46176))
Version 1.66.0 (2022-12-15)
===========================
Language
--------
- [Permit specifying explicit discriminants on all `repr(Int)`
enums](rust-lang/rust#95710)
```rust
#[repr(u8)]
enum Foo {
A(u8) = 0,
B(i8) = 1,
C(bool) = 42,
}
```
- [Allow transmutes between the same type differing only in
lifetimes](rust-lang/rust#101520)
- [Change constant evaluation errors from a deny-by-default lint to a
hard error](rust-lang/rust#102091)
- [Trigger `must_use` on `impl Trait` for
supertraits](rust-lang/rust#102287) This
makes `impl ExactSizeIterator` respect the existing `#[must_use]`
annotation on `Iterator`.
- [Allow `..X` and `..=X` in
patterns](rust-lang/rust#102275)
- [Uplift `clippy::for_loops_over_fallibles` lint into
rustc](rust-lang/rust#99696)
- [Stabilize `sym` operands in inline
assembly](rust-lang/rust#103168)
- [Update to Unicode 15](rust-lang/rust#101912)
- [Opaque types no longer imply lifetime
bounds](rust-lang/rust#95474) This is a
soundness fix which may break code that was erroneously relying on this
behavior.
Compiler
--------
- [Add armv5te-none-eabi and thumbv5te-none-eabi tier 3
targets](rust-lang/rust#101329)
- Refer to Rust's [platform support page][platform-support-doc] for
more information on Rust's tiered platform support.
- [Add support for linking against macOS universal
libraries](rust-lang/rust#98736)
Libraries
---------
- [Fix `#[derive(Default)]` on a generic `#[default]` enum adding
unnecessary `Default`
bounds](rust-lang/rust#101040)
- [Update to Unicode 15](rust-lang/rust#101821)
Stabilized APIs
---------------
- [`proc_macro::Span::source_text`](https://doc.rust-lang.org/stable/proc_macro/struct.Span.html#method.source_text)
- [`uX::{checked_add_signed, overflowing_add_signed,
saturating_add_signed,
wrapping_add_signed}`](https://doc.rust-lang.org/stable/std/primitive.u8.html#method.checked_add_signed)
- [`iX::{checked_add_unsigned, overflowing_add_unsigned,
saturating_add_unsigned,
wrapping_add_unsigned}`](https://doc.rust-lang.org/stable/std/primitive.i8.html#method.checked_add_unsigned)
- [`iX::{checked_sub_unsigned, overflowing_sub_unsigned,
saturating_sub_unsigned,
wrapping_sub_unsigned}`](https://doc.rust-lang.org/stable/std/primitive.i8.html#method.checked_sub_unsigned)
- [`BTreeSet::{first, last, pop_first,
pop_last}`](https://doc.rust-lang.org/stable/std/collections/struct.BTreeSet.html#method.first)
- [`BTreeMap::{first_key_value, last_key_value, first_entry, last_entry,
pop_first,
pop_last}`](https://doc.rust-lang.org/stable/std/collections/struct.BTreeMap.html#method.first_key_value)
- [Add `AsFd` implementations for stdio lock types on
WASI.](rust-lang/rust#101768)
- [`impl TryFrom<Vec<T>> for Box<[T;
N]>`](https://doc.rust-lang.org/stable/std/boxed/struct.Box.html#impl-TryFrom%3CVec%3CT%2C%20Global%3E%3E-for-Box%3C%5BT%3B%20N%5D%2C%20Global%3E)
- [`core::hint::black_box`](https://doc.rust-lang.org/stable/std/hint/fn.black_box.html)
- [`Duration::try_from_secs_{f32,f64}`](https://doc.rust-lang.org/stable/std/time/struct.Duration.html#method.try_from_secs_f32)
- [`Option::unzip`](https://doc.rust-lang.org/stable/std/option/enum.Option.html#method.unzip)
- [`std::os::fd`](https://doc.rust-lang.org/stable/std/os/fd/index.html)
Rustdoc
-------
- [Add Rustdoc warning for invalid HTML tags in the
documentation](rust-lang/rust#101720)
Cargo
-----
- [Added `cargo remove` to remove dependencies from
Cargo.toml](https://doc.rust-lang.org/nightly/cargo/commands/cargo-remove.html)
- [`cargo publish` now waits for the new version to be downloadable
before exiting](rust-lang/cargo#11062)
See [detailed release notes](https://github.com/rust-lang/cargo/blob/master/CHANGELOG.md#cargo-166-2022-12-15) for more.
Compatibility Notes
-------------------
- [Only apply `ProceduralMasquerade` hack to older versions of
`rental`](rust-lang/rust#94063)
- [Don't export `__heap_base` and `__data_end` on
wasm32-wasi.](rust-lang/rust#102385)
- [Don't export `__wasm_init_memory` on
WebAssembly.](rust-lang/rust#102426)
- [Only export `__tls_*` on
wasm32-unknown-unknown.](rust-lang/rust#102440)
- [Don't link to `libresolv` in libstd on
Darwin](rust-lang/rust#102766)
- [Update libstd's libc to 0.2.135 (to make `libstd` no longer pull in
`libiconv.dylib` on
Darwin)](rust-lang/rust#103277)
- [Opaque types no longer imply lifetime
bounds](rust-lang/rust#95474)
This is a soundness fix which may break code that was erroneously
relying on this behavior.
- [Make `order_dependent_trait_objects` show up in future-breakage
reports](rust-lang/rust#102635)
- [Change std::process::Command spawning to default to inheriting the
parent's signal mask](rust-lang/rust#101077)
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.
- [Enable BOLT for LLVM
compilation](rust-lang/rust#94381)
- [Enable LTO for
rustc_driver.so](rust-lang/rust#101403)
Version 1.65.0 (2022-11-03)
==========================
Language
--------
- [Error on `as` casts of enums with `#[non_exhaustive]` variants]
(rust-lang/rust#92744)
- [Stabilize `let else`](rust-lang/rust#93628)
- [Stabilize generic associated types (GATs)]
(rust-lang/rust#96709)
- [Add lints `let_underscore_drop`, `let_underscore_lock`, and
`let_underscore_must_use` from Clippy]
(rust-lang/rust#97739)
- [Stabilize `break`ing from arbitrary labeled blocks ("label-break-value")]
(rust-lang/rust#99332)
- [Uninitialized integers, floats, and raw pointers are now considered
immediate UB](rust-lang/rust#98919).
Usage of `MaybeUninit` is the correct way to work with uninitialized
memory.
- [Stabilize raw-dylib for Windows x86_64, aarch64, and thumbv7a]
(rust-lang/rust#99916)
- [Do not allow `Drop` impl on foreign ADTs]
(rust-lang/rust#99576)
Compiler
--------
- [Stabilize -Csplit-debuginfo on Linux]
(rust-lang/rust#98051)
- [Use niche-filling optimization even when multiple variants have
data] (rust-lang/rust#94075)
- [Associated type projections are now verified to be well-formed
prior to resolving the underlying type]
(rust-lang/rust#99217)
- [Stringify non-shorthand visibility correctly]
(rust-lang/rust#100350)
- [Normalize struct field types when unsizing]
(rust-lang/rust#101831)
- [Update to LLVM 15](rust-lang/rust#99464)
- [Fix aarch64 call abi to correctly zeroext when needed]
(rust-lang/rust#97800)
- [debuginfo: Generalize C++-like encoding for enums]
(rust-lang/rust#98393)
- [Add `special_module_name` lint]
(rust-lang/rust#94467)
- [Add support for generating unique profraw files by default when
using `-C instrument-coverage`]
(rust-lang/rust#100384)
- [Allow dynamic linking for iOS/tvOS targets]
(rust-lang/rust#100636)
New targets:
- [Add armv4t-none-eabi as a tier 3 target]
(rust-lang/rust#100244)
- [Add powerpc64-unknown-openbsd and riscv64-unknown-openbsd as tier 3 targets]
(rust-lang/rust#101025)
- Refer to Rust's [platform support page][platform-support-doc] for more
information on Rust's tiered platform support.
Libraries
---------
- [Don't generate `PartialEq::ne` in derive(PartialEq)]
(rust-lang/rust#98655)
- [Windows RNG: Use `BCRYPT_RNG_ALG_HANDLE` by default]
(rust-lang/rust#101325)
- [Forbid mixing `System` with direct system allocator calls]
(rust-lang/rust#101394)
- [Document no support for writing to non-blocking stdio/stderr]
(rust-lang/rust#101416)
- [`std::layout::Layout` size must not overflow `isize::MAX` when
rounded up to `align`](rust-lang/rust#95295)
This also changes the safety conditions on
`Layout::from_size_align_unchecked`.
Stabilized APIs
---------------
- [`std::backtrace::Backtrace`]
(https://doc.rust-lang.org/stable/std/backtrace/struct.Backtrace.html)
- [`Bound::as_ref`]
(https://doc.rust-lang.org/stable/std/ops/enum.Bound.html#method.as_ref)
- [`std::io::read_to_string`]
(https://doc.rust-lang.org/stable/std/io/fn.read_to_string.html)
- [`<*const T>::cast_mut`]
(https://doc.rust-lang.org/stable/std/primitive.pointer.html#method.cast_mut)
- [`<*mut T>::cast_const`]
(https://doc.rust-lang.org/stable/std/primitive.pointer.html#method.cast_const)
These APIs are now stable in const contexts:
- [`<*const T>::offset_from`]
(https://doc.rust-lang.org/stable/std/primitive.pointer.html#method.offset_from)
- [`<*mut T>::offset_from`]
(https://doc.rust-lang.org/stable/std/primitive.pointer.html#method.offset_from)
Cargo
-----
- [Apply GitHub fast path even for partial hashes]
(rust-lang/cargo#10807)
- [Do not add home bin path to PATH if it's already there]
(rust-lang/cargo#11023)
- [Take priority into account within the pending queue]
(rust-lang/cargo#11032).
This slightly optimizes job scheduling by Cargo, with typically
small improvements on larger crate graph builds.
Compatibility Notes
-------------------
- [`std::layout::Layout` size must not overflow `isize::MAX` when
rounded up to `align`] (rust-lang/rust#95295).
This also changes the safety conditions on
`Layout::from_size_align_unchecked`.
- [`PollFn` now only implements `Unpin` if the closure is `Unpin`]
(rust-lang/rust#102737).
This is a possible breaking change if users were relying on the
blanket unpin implementation. See discussion on the PR for
details of why this change was made.
- [Drop ExactSizeIterator impl from std::char::EscapeAscii]
(rust-lang/rust#99880)
This is a backwards-incompatible change to the standard library's
surface area, but is unlikely to affect real world usage.
- [Do not consider a single repeated lifetime eligible for elision
in the return type] (rust-lang/rust#103450)
This behavior was unintentionally changed in 1.64.0, and this
release reverts that change by making this an error again.
- [Reenable disabled early syntax gates as future-incompatibility
lints] (rust-lang/rust#99935)
- [Update the minimum external LLVM to 13]
(rust-lang/rust#100460)
- [Don't duplicate file descriptors into stdio fds]
(rust-lang/rust#101426)
- [Sunset RLS](rust-lang/rust#100863)
- [Deny usage of `#![cfg_attr(..., crate_type = ...)]` to set the
crate type] (rust-lang/rust#99784)
This strengthens the forward compatibility lint
deprecated_cfg_attr_crate_type_name to deny.
- [`llvm-has-rust-patches` allows setting the build system to treat
the LLVM as having Rust-specific patches]
(rust-lang/rust#101072)
This option may need to be set for distributions that are building
Rust with a patched LLVM via `llvm-config`, not the built-in
LLVM.
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.
- [Add `x.sh` and `x.ps1` shell scripts]
(rust-lang/rust#99992)
- [compiletest: use target cfg instead of hard-coded tables]
(rust-lang/rust#100260)
- [Use object instead of LLVM for reading bitcode from rlibs]
(rust-lang/rust#98100)
- [Enable MIR inlining for optimized compilations]
(rust-lang/rust#91743)
This provides a 3-10% improvement in compiletimes for real world
crates. See [perf results]
(https://perf.rust-lang.org/compare.html?start=aedf78e56b2279cc869962feac5153b6ba7001ed&end=0075bb4fad68e64b6d1be06bf2db366c30bc75e1&stat=instructions:u).
jperkin pushed a commit to TritonDataCenter/pkgsrc that referenced this pull request May 14, 2026
Pkgsrc changes:
* pkglint cleanups, bump bootstrap kits to 1.65.0.
* New target: mipsel-unknown-netbsd, for cpu=mips32 with soft-float.
* Managed to retain the build of aarch64_be, llvm needed a patch to
avoid use of neon instructions in the BE case (llvm doesn't support
use of neon in BE mode). Ref. patch to
src/llvm-project/llvm/lib/Support/BLAKE3/blake3_impl.h.
Also submitted upstream of LLVM to the BLAKE3 maintainers.
* The minimum gcc version is now 7.x, and that includes the
cross-compiler for the targets. For i386 this also needs to
/usr/include/gcc-7 include files in the target root, because
immintrin.h from gcc 5 is not compatible with gcc 7.x. This
applies for the targets where we build against a root from netbsd-8
(sparc64, powerpc, i386), and files/gcc-wrap gets a hack for this.
* Pick up tweak for -latomic inclusion from
rust-lang/rust#104220
and
rust-lang/rust#104572
* Retain ability to do 32-bit NetBSD, by changing from 64 to 32 bit
types in library/std/src/sys/unix/thread_parker/netbsd.rs.
* I've tried to get the "openssl-src" build with -latomic where it's
needed. I've introduced the "NetBSD-generic32" system type and use
it for the NetBSD mipsel target. There is another attempt to do
the same in the patch to vendor/openssl-sys/build/main.rs.
Upstream changes:
Version 1.66.1 (2023-01-10)
===========================
- Added validation of SSH host keys for git URLs in Cargo
([CVE-2022-46176](https://www.cve.org/CVERecord?id=CVE-2022-46176))
Version 1.66.0 (2022-12-15)
===========================
Language
--------
- [Permit specifying explicit discriminants on all `repr(Int)`
enums](rust-lang/rust#95710)
```rust
#[repr(u8)]
enum Foo {
A(u8) = 0,
B(i8) = 1,
C(bool) = 42,
}
```
- [Allow transmutes between the same type differing only in
lifetimes](rust-lang/rust#101520)
- [Change constant evaluation errors from a deny-by-default lint to a
hard error](rust-lang/rust#102091)
- [Trigger `must_use` on `impl Trait` for
supertraits](rust-lang/rust#102287) This
makes `impl ExactSizeIterator` respect the existing `#[must_use]`
annotation on `Iterator`.
- [Allow `..X` and `..=X` in
patterns](rust-lang/rust#102275)
- [Uplift `clippy::for_loops_over_fallibles` lint into
rustc](rust-lang/rust#99696)
- [Stabilize `sym` operands in inline
assembly](rust-lang/rust#103168)
- [Update to Unicode 15](rust-lang/rust#101912)
- [Opaque types no longer imply lifetime
bounds](rust-lang/rust#95474) This is a
soundness fix which may break code that was erroneously relying on this
behavior.
Compiler
--------
- [Add armv5te-none-eabi and thumbv5te-none-eabi tier 3
targets](rust-lang/rust#101329)
- Refer to Rust's [platform support page][platform-support-doc] for
more information on Rust's tiered platform support.
- [Add support for linking against macOS universal
libraries](rust-lang/rust#98736)
Libraries
---------
- [Fix `#[derive(Default)]` on a generic `#[default]` enum adding
unnecessary `Default`
bounds](rust-lang/rust#101040)
- [Update to Unicode 15](rust-lang/rust#101821)
Stabilized APIs
---------------
- [`proc_macro::Span::source_text`](https://doc.rust-lang.org/stable/proc_macro/struct.Span.html#method.source_text)
- [`uX::{checked_add_signed, overflowing_add_signed,
saturating_add_signed,
wrapping_add_signed}`](https://doc.rust-lang.org/stable/std/primitive.u8.html#method.checked_add_signed)
- [`iX::{checked_add_unsigned, overflowing_add_unsigned,
saturating_add_unsigned,
wrapping_add_unsigned}`](https://doc.rust-lang.org/stable/std/primitive.i8.html#method.checked_add_unsigned)
- [`iX::{checked_sub_unsigned, overflowing_sub_unsigned,
saturating_sub_unsigned,
wrapping_sub_unsigned}`](https://doc.rust-lang.org/stable/std/primitive.i8.html#method.checked_sub_unsigned)
- [`BTreeSet::{first, last, pop_first,
pop_last}`](https://doc.rust-lang.org/stable/std/collections/struct.BTreeSet.html#method.first)
- [`BTreeMap::{first_key_value, last_key_value, first_entry, last_entry,
pop_first,
pop_last}`](https://doc.rust-lang.org/stable/std/collections/struct.BTreeMap.html#method.first_key_value)
- [Add `AsFd` implementations for stdio lock types on
WASI.](rust-lang/rust#101768)
- [`impl TryFrom<Vec<T>> for Box<[T;
N]>`](https://doc.rust-lang.org/stable/std/boxed/struct.Box.html#impl-TryFrom%3CVec%3CT%2C%20Global%3E%3E-for-Box%3C%5BT%3B%20N%5D%2C%20Global%3E)
- [`core::hint::black_box`](https://doc.rust-lang.org/stable/std/hint/fn.black_box.html)
- [`Duration::try_from_secs_{f32,f64}`](https://doc.rust-lang.org/stable/std/time/struct.Duration.html#method.try_from_secs_f32)
- [`Option::unzip`](https://doc.rust-lang.org/stable/std/option/enum.Option.html#method.unzip)
- [`std::os::fd`](https://doc.rust-lang.org/stable/std/os/fd/index.html)
Rustdoc
-------
- [Add Rustdoc warning for invalid HTML tags in the
documentation](rust-lang/rust#101720)
Cargo
-----
- [Added `cargo remove` to remove dependencies from
Cargo.toml](https://doc.rust-lang.org/nightly/cargo/commands/cargo-remove.html)
- [`cargo publish` now waits for the new version to be downloadable
before exiting](rust-lang/cargo#11062)
See [detailed release notes](https://github.com/rust-lang/cargo/blob/master/CHANGELOG.md#cargo-166-2022-12-15) for more.
Compatibility Notes
-------------------
- [Only apply `ProceduralMasquerade` hack to older versions of
`rental`](rust-lang/rust#94063)
- [Don't export `__heap_base` and `__data_end` on
wasm32-wasi.](rust-lang/rust#102385)
- [Don't export `__wasm_init_memory` on
WebAssembly.](rust-lang/rust#102426)
- [Only export `__tls_*` on
wasm32-unknown-unknown.](rust-lang/rust#102440)
- [Don't link to `libresolv` in libstd on
Darwin](rust-lang/rust#102766)
- [Update libstd's libc to 0.2.135 (to make `libstd` no longer pull in
`libiconv.dylib` on
Darwin)](rust-lang/rust#103277)
- [Opaque types no longer imply lifetime
bounds](rust-lang/rust#95474)
This is a soundness fix which may break code that was erroneously
relying on this behavior.
- [Make `order_dependent_trait_objects` show up in future-breakage
reports](rust-lang/rust#102635)
- [Change std::process::Command spawning to default to inheriting the
parent's signal mask](rust-lang/rust#101077)
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.
- [Enable BOLT for LLVM
compilation](rust-lang/rust#94381)
- [Enable LTO for
rustc_driver.so](rust-lang/rust#101403)
Version 1.65.0 (2022-11-03)
==========================
Language
--------
- [Error on `as` casts of enums with `#[non_exhaustive]` variants]
(rust-lang/rust#92744)
- [Stabilize `let else`](rust-lang/rust#93628)
- [Stabilize generic associated types (GATs)]
(rust-lang/rust#96709)
- [Add lints `let_underscore_drop`, `let_underscore_lock`, and
`let_underscore_must_use` from Clippy]
(rust-lang/rust#97739)
- [Stabilize `break`ing from arbitrary labeled blocks ("label-break-value")]
(rust-lang/rust#99332)
- [Uninitialized integers, floats, and raw pointers are now considered
immediate UB](rust-lang/rust#98919).
Usage of `MaybeUninit` is the correct way to work with uninitialized
memory.
- [Stabilize raw-dylib for Windows x86_64, aarch64, and thumbv7a]
(rust-lang/rust#99916)
- [Do not allow `Drop` impl on foreign ADTs]
(rust-lang/rust#99576)
Compiler
--------
- [Stabilize -Csplit-debuginfo on Linux]
(rust-lang/rust#98051)
- [Use niche-filling optimization even when multiple variants have
data] (rust-lang/rust#94075)
- [Associated type projections are now verified to be well-formed
prior to resolving the underlying type]
(rust-lang/rust#99217)
- [Stringify non-shorthand visibility correctly]
(rust-lang/rust#100350)
- [Normalize struct field types when unsizing]
(rust-lang/rust#101831)
- [Update to LLVM 15](rust-lang/rust#99464)
- [Fix aarch64 call abi to correctly zeroext when needed]
(rust-lang/rust#97800)
- [debuginfo: Generalize C++-like encoding for enums]
(rust-lang/rust#98393)
- [Add `special_module_name` lint]
(rust-lang/rust#94467)
- [Add support for generating unique profraw files by default when
using `-C instrument-coverage`]
(rust-lang/rust#100384)
- [Allow dynamic linking for iOS/tvOS targets]
(rust-lang/rust#100636)
New targets:
- [Add armv4t-none-eabi as a tier 3 target]
(rust-lang/rust#100244)
- [Add powerpc64-unknown-openbsd and riscv64-unknown-openbsd as tier 3 targets]
(rust-lang/rust#101025)
- Refer to Rust's [platform support page][platform-support-doc] for more
information on Rust's tiered platform support.
Libraries
---------
- [Don't generate `PartialEq::ne` in derive(PartialEq)]
(rust-lang/rust#98655)
- [Windows RNG: Use `BCRYPT_RNG_ALG_HANDLE` by default]
(rust-lang/rust#101325)
- [Forbid mixing `System` with direct system allocator calls]
(rust-lang/rust#101394)
- [Document no support for writing to non-blocking stdio/stderr]
(rust-lang/rust#101416)
- [`std::layout::Layout` size must not overflow `isize::MAX` when
rounded up to `align`](rust-lang/rust#95295)
This also changes the safety conditions on
`Layout::from_size_align_unchecked`.
Stabilized APIs
---------------
- [`std::backtrace::Backtrace`]
(https://doc.rust-lang.org/stable/std/backtrace/struct.Backtrace.html)
- [`Bound::as_ref`]
(https://doc.rust-lang.org/stable/std/ops/enum.Bound.html#method.as_ref)
- [`std::io::read_to_string`]
(https://doc.rust-lang.org/stable/std/io/fn.read_to_string.html)
- [`<*const T>::cast_mut`]
(https://doc.rust-lang.org/stable/std/primitive.pointer.html#method.cast_mut)
- [`<*mut T>::cast_const`]
(https://doc.rust-lang.org/stable/std/primitive.pointer.html#method.cast_const)
These APIs are now stable in const contexts:
- [`<*const T>::offset_from`]
(https://doc.rust-lang.org/stable/std/primitive.pointer.html#method.offset_from)
- [`<*mut T>::offset_from`]
(https://doc.rust-lang.org/stable/std/primitive.pointer.html#method.offset_from)
Cargo
-----
- [Apply GitHub fast path even for partial hashes]
(rust-lang/cargo#10807)
- [Do not add home bin path to PATH if it's already there]
(rust-lang/cargo#11023)
- [Take priority into account within the pending queue]
(rust-lang/cargo#11032).
This slightly optimizes job scheduling by Cargo, with typically
small improvements on larger crate graph builds.
Compatibility Notes
-------------------
- [`std::layout::Layout` size must not overflow `isize::MAX` when
rounded up to `align`] (rust-lang/rust#95295).
This also changes the safety conditions on
`Layout::from_size_align_unchecked`.
- [`PollFn` now only implements `Unpin` if the closure is `Unpin`]
(rust-lang/rust#102737).
This is a possible breaking change if users were relying on the
blanket unpin implementation. See discussion on the PR for
details of why this change was made.
- [Drop ExactSizeIterator impl from std::char::EscapeAscii]
(rust-lang/rust#99880)
This is a backwards-incompatible change to the standard library's
surface area, but is unlikely to affect real world usage.
- [Do not consider a single repeated lifetime eligible for elision
in the return type] (rust-lang/rust#103450)
This behavior was unintentionally changed in 1.64.0, and this
release reverts that change by making this an error again.
- [Reenable disabled early syntax gates as future-incompatibility
lints] (rust-lang/rust#99935)
- [Update the minimum external LLVM to 13]
(rust-lang/rust#100460)
- [Don't duplicate file descriptors into stdio fds]
(rust-lang/rust#101426)
- [Sunset RLS](rust-lang/rust#100863)
- [Deny usage of `#![cfg_attr(..., crate_type = ...)]` to set the
crate type] (rust-lang/rust#99784)
This strengthens the forward compatibility lint
deprecated_cfg_attr_crate_type_name to deny.
- [`llvm-has-rust-patches` allows setting the build system to treat
the LLVM as having Rust-specific patches]
(rust-lang/rust#101072)
This option may need to be set for distributions that are building
Rust with a patched LLVM via `llvm-config`, not the built-in
LLVM.
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.
- [Add `x.sh` and `x.ps1` shell scripts]
(rust-lang/rust#99992)
- [compiletest: use target cfg instead of hard-coded tables]
(rust-lang/rust#100260)
- [Use object instead of LLVM for reading bitcode from rlibs]
(rust-lang/rust#98100)
- [Enable MIR inlining for optimized compilations]
(rust-lang/rust#91743)
This provides a 3-10% improvement in compiletimes for real world
crates. See [perf results]
(https://perf.rust-lang.org/compare.html?start=aedf78e56b2279cc869962feac5153b6ba7001ed&end=0075bb4fad68e64b6d1be06bf2db366c30bc75e1&stat=instructions:u).
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

S-waiting-on-borsStatus: Waiting on bors to run and complete tests. Bors will change the label on completion.T-compilerRelevant to the compiler team, which will review and decide on the PR/issue.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

8 participants

@CAD97@rust-highfive@rust-log-analyzer@joshtriplett@davidtwco@bors@petrochenkov@rustbot