Skip to content

Add #[define_opaques] attribute and require it for all type-alias-impl-trait sites that register a hidden type#128440

Merged
bors merged 4 commits intorust-lang:masterfrom
oli-obk:defines
Mar 11, 2025
Merged

Add #[define_opaques] attribute and require it for all type-alias-impl-trait sites that register a hidden type#128440
bors merged 4 commits intorust-lang:masterfrom
oli-obk:defines

Conversation

@oli-obk
Copy link
Contributor

@oli-obk oli-obk commented Jul 31, 2024

Instead of relying on the signature of items to decide whether they are constraining an opaque type, the opaque types that the item constrains must be explicitly listed.

A previous version of this PR used an actual attribute, but had to keep the resolved DefIds in a side table.

Now we just lower to fields in the AST that have no surface syntax, instead a builtin attribute macro fills in those fields where applicable.

Note that for convenience referencing opaque types in associated types from associated methods on the same impl will not require an attribute. If that causes problems #[defines()] can be used to overwrite the default of searching for opaques in the signature.

One wart of this design is that closures and static items do not have generics. So since I stored the opaques in the generics of functions, consts and methods, I would need to add a custom field to closures and statics to track this information. During a T-types discussion we decided to just not do this for now.

fixes #131298

@oli-obk oli-obk added the S-waiting-on-author Status: This is awaiting some action (such as code changes or more information) from the author. label Jul 31, 2024
@rust-log-analyzer

This comment has been minimized.

@petrochenkov petrochenkov self-assigned this Jul 31, 2024
@petrochenkov petrochenkov 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 Jul 31, 2024
@bors
Copy link
Collaborator

bors commented Aug 1, 2024

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

@petrochenkov

This comment was marked as resolved.

@petrochenkov petrochenkov 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 14, 2024
@petrochenkov petrochenkov removed their assignment Aug 14, 2024
@petrochenkov

This comment was marked as resolved.

@traviscross traviscross added the F-type_alias_impl_trait `#[feature(type_alias_impl_trait)]` label Aug 23, 2024
matthiaskrgr added a commit to matthiaskrgr/rust that referenced this pull request Dec 4, 2024
…ler-errors

Avoid `opaque type not constrained` errors in the presence of other errors

pulled out of rust-lang#128440

These errors carry no new information if the opaque type was actually used in a constraining (but erroneous) way somewhere.
rust-timer added a commit to rust-lang-ci/rust that referenced this pull request Dec 4, 2024
Rollup merge of rust-lang#133850 - oli-obk:push-xryukktpyooq, r=compiler-errors

Avoid `opaque type not constrained` errors in the presence of other errors

pulled out of rust-lang#128440

These errors carry no new information if the opaque type was actually used in a constraining (but erroneous) way somewhere.
@rustbot rustbot added T-compiler Relevant to the compiler team, which will review and decide on the PR/issue. T-libs Relevant to the library team, which will review and decide on the PR/issue. WG-trait-system-refactor The Rustc Trait System Refactor Initiative (-Znext-solver) labels Dec 10, 2024
@rust-log-analyzer

This comment has been minimized.

@bors

This comment was marked as resolved.

@rust-log-analyzer

This comment has been minimized.

@rustbot rustbot added A-tidy Area: The tidy tool T-bootstrap Relevant to the bootstrap subteam: Rust's build system (x.py and src/bootstrap) labels Mar 11, 2025
@rust-timer
Copy link
Collaborator

Finished benchmarking commit (b4867ea): comparison URL.

Overall result: ✅ improvements - no action needed

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

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

Instruction count

This is the most reliable metric that we have; it was used to determine the overall result at the top of this comment. However, even this metric can sometimes exhibit noise.

mean range count
Regressions ❌
(primary)
- - 0
Regressions ❌
(secondary)
- - 0
Improvements ✅
(primary)
-0.5% [-1.6%, -0.2%] 56
Improvements ✅
(secondary)
-0.6% [-1.5%, -0.4%] 4
All ❌✅ (primary) -0.5% [-1.6%, -0.2%] 56

Max RSS (memory usage)

Results (primary 1.4%, secondary -3.7%)

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)
1.4% [1.4%, 1.4%] 1
Regressions ❌
(secondary)
- - 0
Improvements ✅
(primary)
- - 0
Improvements ✅
(secondary)
-3.7% [-4.4%, -3.0%] 2
All ❌✅ (primary) 1.4% [1.4%, 1.4%] 1

Cycles

Results (primary -1.1%, secondary -2.4%)

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)
-1.1% [-1.2%, -0.9%] 2
Improvements ✅
(secondary)
-4.9% [-5.2%, -4.6%] 2
All ❌✅ (primary) -1.1% [-1.2%, -0.9%] 2

Binary size

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

Bootstrap: 782.387s -> 780.697s (-0.22%)
Artifact size: 365.21 MiB -> 365.23 MiB (0.01%)

@rustbot rustbot removed the S-waiting-on-perf Status: Waiting on a perf run to be completed. label Mar 11, 2025
@oli-obk
Copy link
Contributor Author

oli-obk commented Mar 11, 2025

Yay

@oli-obk
Copy link
Contributor Author

oli-obk commented Mar 11, 2025

@bors r=lcnr

@bors
Copy link
Collaborator

bors commented Mar 11, 2025

📌 Commit 69a1bb8 has been approved by lcnr

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 Mar 11, 2025
@bors
Copy link
Collaborator

bors commented Mar 11, 2025

⌛ Testing commit 69a1bb8 with merge 6650252...

@bors
Copy link
Collaborator

bors commented Mar 11, 2025

☀️ Test successful - checks-actions
Approved by: lcnr
Pushing 6650252 to master...

@bors bors added the merged-by-bors This PR was explicitly merged by bors. label Mar 11, 2025
@github-actions
Copy link
Contributor

Post-merge analysis result

Test differences

  • x86_64-gnu-nopt
    • compiler/rustc_ast_pretty/src/pprust/state.rs - pprust::state::State<'a>::print_let (line 1448): [missing] -> ignore
    • compiler/rustc_parse/src/parser/item.rs - parser::item::Parser<'a>::parse_item_impl (line 560): [missing] -> ignore
    • compiler/rustc_resolve/src/late.rs - late::LateResolutionVisitor<'a,'ast,'ra,'tcx>::compute_and_check_or_pat_binding_map (line 3690): [missing] -> pass
    • compiler/rustc_hir/src/hir.rs - hir::LocalSource::AsyncFn (line 2732): [missing] -> ignore
    • compiler/rustc_hir/src/hir.rs - hir::Node<'hir>::ident (line 4520): [missing] -> ignore
    • compiler/rustc_parse/src/parser/item.rs - parser::item::Parser<'a>::parse_item_foreign_mod (line 1213): [missing] -> ignore
    • [ui] tests/ui/type-alias-impl-trait/define_opaques_attr/generics.rs: [missing] -> pass
    • compiler/rustc_parse/src/parser/item.rs - parser::item::Parser<'a>::parse_item_extern_crate (line 1157): [missing] -> ignore
    • [ui] tests/ui/type-alias-impl-trait/define_opaques_attr/foreign_type.rs: [missing] -> pass
    • [ui] tests/ui/type-alias-impl-trait/define_opaques_attr/non_type.rs: [missing] -> pass
    • (and 23 additional testss)
  • x86_64-gnu-llvm-19-3
    • compiler/rustc_hir/src/hir.rs - hir::LocalSource::AsyncFn (line 2732): [missing] -> ignore
    • compiler/rustc_hir/src/hir.rs - hir::PatKind::Slice (line 1744): [missing] -> ignore
    • compiler/rustc_hir/src/hir.rs - hir::Node<'hir>::ident (line 4520): [missing] -> ignore
    • [ui] tests/ui/type-alias-impl-trait/path_resolution_taint.rs: [missing] -> pass
    • compiler/rustc_resolve/src/late.rs - late::LateResolutionVisitor<'a,'ast,'ra,'tcx>::compute_and_check_or_pat_binding_map (line 3690): [missing] -> pass
    • [ui] tests/ui/type-alias-impl-trait/define_opaques_attr/non_type.rs: [missing] -> pass
    • [ui] tests/ui/type-alias-impl-trait/define_opaques_attr/generics.rs: [missing] -> pass
    • compiler/rustc_resolve/src/late.rs - late::LateResolutionVisitor<'a,'ast,'ra,'tcx>::compute_and_check_binding_map (line 3624): [missing] -> pass
    • compiler/rustc_ast_pretty/src/pprust/state.rs - pprust::state::State<'a>::print_let (line 1437): [missing] -> ignore
    • [ui] tests/ui/type-alias-impl-trait/define_opaques_attr/no_opaque.rs: [missing] -> pass
    • (and 23 additional testss)
  • x86_64-gnu
    • compiler/rustc_parse/src/parser/item.rs - parser::item::Parser<'a>::parse_item_extern_crate (line 1157): [missing] -> ignore
    • [ui] tests/ui/type-alias-impl-trait/define_opaques_attr/no_opaque.rs: [missing] -> pass
    • compiler/rustc_ast_pretty/src/pprust/state.rs - pprust::state::State<'a>::print_let (line 1448): [missing] -> ignore
    • [ui] tests/ui/type-alias-impl-trait/define_opaques_attr/missing_parens.rs: [missing] -> pass
    • compiler/rustc_hir/src/hir.rs - hir::Node<'hir>::ident (line 4520): [missing] -> ignore
    • [ui] tests/ui/type-alias-impl-trait/define_opaques_attr/non_type.rs: [missing] -> pass
    • compiler/rustc_hir/src/hir.rs - hir::LocalSource::AsyncFn (line 2732): [missing] -> ignore
    • compiler/rustc_ast_pretty/src/pprust/state.rs - pprust::state::State<'a>::print_let (line 1437): [missing] -> ignore
    • compiler/rustc_parse/src/parser/item.rs - parser::item::Parser<'a>::parse_item_foreign_mod (line 1213): [missing] -> ignore
    • [ui] tests/ui/type-alias-impl-trait/define_opaques_attr/invalid_path.rs: [missing] -> pass
    • (and 23 additional testss)
  • x86_64-gnu-llvm-18-3
    • compiler/rustc_resolve/src/late.rs - late::LateResolutionVisitor<'a,'ast,'ra,'tcx>::compute_and_check_or_pat_binding_map (line 3690): [missing] -> pass
    • compiler/rustc_parse/src/parser/item.rs - parser::item::Parser<'a>::parse_item_extern_crate (line 1157): [missing] -> ignore
    • [ui] tests/ui/type-alias-impl-trait/define_opaques_attr/no_opaque.rs: [missing] -> pass
    • compiler/rustc_hir/src/hir.rs - hir::LocalSource::AsyncFn (line 2732): [missing] -> ignore
    • compiler/rustc_hir/src/hir.rs - hir::Body (line 1862): [missing] -> pass
    • compiler/rustc_parse/src/parser/item.rs - parser::item::Parser<'a>::parse_item_foreign_mod (line 1213): [missing] -> ignore
    • [ui] tests/ui/type-alias-impl-trait/path_resolution_taint.rs: [missing] -> pass
    • [ui] tests/ui/type-alias-impl-trait/define_opaques_attr/missing_parens.rs: [missing] -> pass
    • compiler/rustc_hir/src/hir.rs - hir::PatKind::Slice (line 1744): [missing] -> ignore
    • compiler/rustc_resolve/src/late.rs - late::LateResolutionVisitor<'a,'ast,'ra,'tcx>::compute_and_check_binding_map (line 3624): [missing] -> pass
    • (and 23 additional testss)
  • x86_64-gnu-stable
    • [ui] tests/ui/type-alias-impl-trait/define_opaques_attr/no_opaque.rs: [missing] -> pass
    • compiler/rustc_resolve/src/late.rs - late::LateResolutionVisitor<'a,'ast,'ra,'tcx>::compute_and_check_binding_map (line 3624): [missing] -> pass
    • [ui] tests/ui/type-alias-impl-trait/define_opaques_attr/invalid_path.rs: [missing] -> pass
    • compiler/rustc_hir/src/hir.rs - hir::Node<'hir>::ident (line 4520): [missing] -> ignore
    • [ui] tests/ui/type-alias-impl-trait/define_opaques_attr/generics.rs: [missing] -> pass
    • compiler/rustc_parse/src/parser/item.rs - parser::item::Parser<'a>::parse_item_extern_crate (line 1157): [missing] -> ignore
    • compiler/rustc_parse/src/parser/item.rs - parser::item::Parser<'a>::parse_item_foreign_mod (line 1213): [missing] -> ignore
    • [ui] tests/ui/type-alias-impl-trait/define_opaques_attr/non_type.rs: [missing] -> pass
    • [ui] tests/ui/type-alias-impl-trait/path_resolution_taint.rs: [missing] -> pass
    • compiler/rustc_ast_pretty/src/pprust/state.rs - pprust::state::State<'a>::print_let (line 1437): [missing] -> ignore
    • (and 23 additional testss)
  • aarch64-apple
    • compiler/rustc_hir/src/hir.rs - hir::Body (line 1862): [missing] -> pass
    • [ui] tests/ui/type-alias-impl-trait/define_opaques_attr/non_type.rs: [missing] -> pass
    • [ui] tests/ui/type-alias-impl-trait/define_opaques_attr/no_opaque.rs: [missing] -> pass
    • compiler/rustc_hir/src/hir.rs - hir::PatKind::Slice (line 1744): [missing] -> ignore
    • [ui] tests/ui/type-alias-impl-trait/define_opaques_attr/missing_parens.rs: [missing] -> pass
    • compiler/rustc_hir/src/hir.rs - hir::Node<'hir>::ident (line 4520): [missing] -> ignore
    • [ui] tests/ui/type-alias-impl-trait/define_opaques_attr/invalid_path.rs: [missing] -> pass
    • compiler/rustc_parse/src/parser/item.rs - parser::item::Parser<'a>::parse_item_foreign_mod (line 1213): [missing] -> ignore
    • compiler/rustc_resolve/src/late.rs - late::LateResolutionVisitor<'a,'ast,'ra,'tcx>::compute_and_check_or_pat_binding_map (line 3690): [missing] -> pass
    • compiler/rustc_parse/src/parser/item.rs - parser::item::Parser<'a>::parse_item_impl (line 560): [missing] -> ignore
    • (and 23 additional testss)
  • aarch64-gnu
    • compiler/rustc_parse/src/parser/item.rs - parser::item::Parser<'a>::parse_item_extern_crate (line 1157): [missing] -> ignore
    • compiler/rustc_hir/src/hir.rs - hir::PatKind::Slice (line 1744): [missing] -> ignore
    • [ui] tests/ui/type-alias-impl-trait/define_opaques_attr/foreign_type.rs: [missing] -> pass
    • compiler/rustc_resolve/src/late.rs - late::LateResolutionVisitor<'a,'ast,'ra,'tcx>::compute_and_check_or_pat_binding_map (line 3690): [missing] -> pass
    • [ui] tests/ui/type-alias-impl-trait/define_opaques_attr/no_opaque.rs: [missing] -> pass
    • [ui] tests/ui/type-alias-impl-trait/define_opaques_attr/invalid_path.rs: [missing] -> pass
    • compiler/rustc_hir/src/hir.rs - hir::Node<'hir>::ident (line 4520): [missing] -> ignore
    • compiler/rustc_ast_pretty/src/pprust/state.rs - pprust::state::State<'a>::print_let (line 1437): [missing] -> ignore
    • compiler/rustc_parse/src/parser/item.rs - parser::item::Parser<'a>::parse_item_impl (line 560): [missing] -> ignore
    • [ui] tests/ui/type-alias-impl-trait/path_resolution_taint.rs: [missing] -> pass
    • (and 23 additional testss)
  • x86_64-apple-1
    • compiler/rustc_ast_pretty/src/pprust/state.rs - pprust::state::State<'a>::print_let (line 1448): [missing] -> ignore
    • compiler/rustc_parse/src/parser/item.rs - parser::item::Parser<'a>::parse_item_extern_crate (line 1157): [missing] -> ignore
    • compiler/rustc_resolve/src/late.rs - late::LateResolutionVisitor<'a,'ast,'ra,'tcx>::compute_and_check_or_pat_binding_map (line 3690): [missing] -> pass
    • compiler/rustc_parse/src/parser/item.rs - parser::item::Parser<'a>::parse_item_foreign_mod (line 1213): [missing] -> ignore
    • compiler/rustc_parse/src/parser/item.rs - parser::item::Parser<'a>::parse_item_impl (line 560): [missing] -> ignore
    • compiler/rustc_resolve/src/late.rs - late::LateResolutionVisitor<'a,'ast,'ra,'tcx>::compute_and_check_binding_map (line 3624): [missing] -> pass
    • compiler/rustc_hir/src/hir.rs - hir::LocalSource::AsyncFn (line 2732): [missing] -> ignore
    • compiler/rustc_ast_pretty/src/pprust/state.rs - pprust::state::State<'a>::print_let (line 1437): [missing] -> ignore
    • compiler/rustc_hir/src/hir.rs - hir::Body (line 1862): [missing] -> pass
    • compiler/rustc_hir/src/hir.rs - hir::Node<'hir>::ident (line 4520): [missing] -> ignore
    • (and 14 additional testss)
  • i686-msvc-2
    • compiler/rustc_hir/src/hir.rs - hir::Node<'hir>::ident (line 4520): [missing] -> ignore
    • compiler/rustc_resolve/src/late.rs - late::LateResolutionVisitor<'a,'ast,'ra,'tcx>::compute_and_check_binding_map (line 3624): [missing] -> pass
    • compiler/rustc_ast_pretty/src/pprust/state.rs - pprust::state::State<'a>::print_let (line 1437): [missing] -> ignore
    • compiler/rustc_parse/src/parser/item.rs - parser::item::Parser<'a>::parse_item_impl (line 560): [missing] -> ignore
    • compiler/rustc_parse/src/parser/item.rs - parser::item::Parser<'a>::parse_item_extern_crate (line 1157): [missing] -> ignore
    • compiler/rustc_hir/src/hir.rs - hir::PatKind::Slice (line 1744): [missing] -> ignore
    • compiler/rustc_ast_pretty/src/pprust/state.rs - pprust::state::State<'a>::print_let (line 1448): [missing] -> ignore
    • compiler/rustc_hir/src/hir.rs - hir::LocalSource::AsyncFn (line 2732): [missing] -> ignore
    • compiler/rustc_parse/src/parser/item.rs - parser::item::Parser<'a>::parse_item_foreign_mod (line 1213): [missing] -> ignore
    • compiler/rustc_hir/src/hir.rs - hir::Body (line 1862): [missing] -> pass
    • (and 13 additional testss)
  • i686-mingw-3
    • compiler/rustc_parse/src/parser/item.rs - parser::item::Parser<'a>::parse_item_impl (line 560): [missing] -> ignore
    • compiler/rustc_hir/src/hir.rs - hir::LocalSource::AsyncFn (line 2732): [missing] -> ignore
    • compiler/rustc_hir/src/hir.rs - hir::PatKind::Slice (line 1744): [missing] -> ignore
    • compiler/rustc_ast_pretty/src/pprust/state.rs - pprust::state::State<'a>::print_let (line 1437): [missing] -> ignore
    • compiler/rustc_parse/src/parser/item.rs - parser::item::Parser<'a>::parse_item_extern_crate (line 1157): [missing] -> ignore
    • compiler/rustc_resolve/src/late.rs - late::LateResolutionVisitor<'a,'ast,'ra,'tcx>::compute_and_check_binding_map (line 3624): [missing] -> pass
    • compiler/rustc_hir/src/hir.rs - hir::Body (line 1862): [missing] -> pass
    • compiler/rustc_hir/src/hir.rs - hir::Node<'hir>::ident (line 4520): [missing] -> ignore
    • compiler/rustc_ast_pretty/src/pprust/state.rs - pprust::state::State<'a>::print_let (line 1448): [missing] -> ignore
    • compiler/rustc_parse/src/parser/item.rs - parser::item::Parser<'a>::parse_item_foreign_mod (line 1213): [missing] -> ignore
    • (and 13 additional testss)

(and 19 additional diffs)

@rust-timer
Copy link
Collaborator

Finished benchmarking commit (6650252): comparison URL.

Overall result: ✅ improvements - no action needed

@rustbot label: -perf-regression

Instruction count

This is the most reliable metric that we have; it was used to determine the overall result at the top of this comment. However, even this metric can sometimes exhibit noise.

mean range count
Regressions ❌
(primary)
- - 0
Regressions ❌
(secondary)
- - 0
Improvements ✅
(primary)
-0.5% [-1.6%, -0.2%] 58
Improvements ✅
(secondary)
-0.4% [-0.4%, -0.4%] 3
All ❌✅ (primary) -0.5% [-1.6%, -0.2%] 58

Max RSS (memory usage)

Results (primary -1.9%, secondary 2.8%)

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

mean range count
Regressions ❌
(primary)
- - 0
Regressions ❌
(secondary)
2.8% [1.2%, 4.3%] 5
Improvements ✅
(primary)
-1.9% [-3.2%, -0.8%] 3
Improvements ✅
(secondary)
- - 0
All ❌✅ (primary) -1.9% [-3.2%, -0.8%] 3

Cycles

Results (primary -1.1%)

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

mean range count
Regressions ❌
(primary)
- - 0
Regressions ❌
(secondary)
- - 0
Improvements ✅
(primary)
-1.1% [-1.4%, -0.8%] 3
Improvements ✅
(secondary)
- - 0
All ❌✅ (primary) -1.1% [-1.4%, -0.8%] 3

Binary size

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

Bootstrap: 781.59s -> 780.09s (-0.19%)
Artifact size: 365.22 MiB -> 365.26 MiB (0.01%)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

A-attributes Area: Attributes (`#[…]`, `#![…]`) A-tidy Area: The tidy tool A-translation Area: Translation infrastructure, and migrating existing diagnostics to SessionDiagnostic F-type_alias_impl_trait `#[feature(type_alias_impl_trait)]` merged-by-bors This PR was explicitly merged by bors. PG-exploit-mitigations Project group: Exploit mitigations S-waiting-on-bors Status: Waiting on bors to run and complete tests. Bors will change the label on completion. T-bootstrap Relevant to the bootstrap subteam: Rust's build system (x.py and src/bootstrap) T-compiler Relevant to the compiler team, which will review and decide on the PR/issue. T-libs Relevant to the library team, which will review and decide on the PR/issue. T-rustdoc-frontend Relevant to the rustdoc-frontend team, which will review and decide on the web UI/UX output. WG-trait-system-refactor The Rustc Trait System Refactor Initiative (-Znext-solver)

Development

Successfully merging this pull request may close these issues.

ICE: panic in a destructor during cleanup