Skip to content

Conversation

fmease
Copy link
Member

@fmease fmease commented May 11, 2023

Previously, we were trying to pretty-print inherent projections with Printer::print_def_path which is incorrect since
it expects the substitutions to be of a certain format (parents substs followed by own substs) which doesn't hold for
inherent projections (self type subst followed by own substs).
Now we print inherent projections manually.

Fixes #111390.
Fixes #111397.

Lacking tests! Is there a test suite / compiletest flags for the pretty-printer? In most if not all cases,
inherent projections are normalized away before they get the chance to appear in diagnostics.

If I were to create regression tests for linked issues, they would need to be mir-opt tests to exercise
-Zdump-mir=all (right?) which doesn't feel quite adequate to me.

@rustbot label F-inherent_associated_types

@rustbot
Copy link
Collaborator

rustbot commented May 11, 2023

r? @petrochenkov

(rustbot has picked a reviewer for you, use r? to override)

@rustbot rustbot added S-waiting-on-review Status: Awaiting review from the assignee but also interested parties. T-compiler Relevant to the compiler team, which will review and decide on the PR/issue. F-inherent_associated_types `#![feature(inherent_associated_types)]` labels May 11, 2023
@fmease

This comment was marked as outdated.

@fmease fmease closed this May 12, 2023
@fmease fmease reopened this May 17, 2023
@fmease fmease force-pushed the pp-inh-proj branch 2 times, most recently from 596e476 to 79f2c1f Compare May 17, 2023 12:23
@fmease
Copy link
Member Author

fmease commented May 17, 2023

I've changed the approach (over at fmease#4, you can see an explanation why the previous one wasn't correct).

@rust-log-analyzer

This comment has been minimized.

@@ -2821,7 +2838,11 @@ define_print_and_forward_display! {
}

ty::AliasTy<'tcx> {
p!(print_def_path(self.def_id, self.substs));
if let DefKind::Impl { of_trait: false } = cx.tcx().def_kind(cx.tcx().parent(self.def_id)) {
Copy link
Member Author

@fmease fmease May 17, 2023

Choose a reason for hiding this comment

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

I'm no longer using AliasTy::kind() here since it ICEs on AssocConsts (see the rust-long-analyzer above). AliasTys can actually be AssocConsts to represent associated const projections even though it's not really documented anywhere as I assume it to be a temporary hack to make #![feature(associated_const_equality)] work until AliasTerm is introduced.

@fmease fmease marked this pull request as draft May 17, 2023 18:35
@fmease
Copy link
Member Author

fmease commented May 17, 2023

Alright, now it should be ready for review! Apologies for the spam. I've added some bug!()s for some ty::Alias(ty::Inherent, _) match arms that shouldn't be reachable in practice which previously called print_def_path on inherent projections which strictly speaking wasn't correct (if they were reachable).

If those cases are ever reached (which I don't believe) the proper solution would be to uplift pretty_print_inherent_projection from PrettyPrinter to Printer, to rename it & and to call it instead. I'm not doing that rn since it'd require a bit of boilerplate w/o any obvious benefit.

@fmease fmease marked this pull request as ready for review May 17, 2023 21:17
@petrochenkov
Copy link
Contributor

r=me after writing a more readable commit message
@rustbot author

@rustbot rustbot 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 May 22, 2023
@fmease
Copy link
Member Author

fmease commented May 22, 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 22, 2023
@petrochenkov
Copy link
Contributor

@bors r+

@bors
Copy link
Collaborator

bors commented May 22, 2023

📌 Commit 778abc7 has been approved by petrochenkov

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 May 22, 2023
bors added a commit to rust-lang-ci/rust that referenced this pull request May 23, 2023
…iaskrgr

Rollup of 7 pull requests

Successful merges:

 - rust-lang#111427 ([rustdoc][JSON] Use exclusively externally tagged enums in the JSON representation)
 - rust-lang#111486 (Pretty-print inherent projections correctly)
 - rust-lang#111722 (Document stack-protector option)
 - rust-lang#111761 (fix(resolve): not defined `extern crate shadow_name`)
 - rust-lang#111845 (Update books)
 - rust-lang#111851 (CFI: Fix encode_region: unexpected ReEarlyBound(0, 'a))
 - rust-lang#111871 (Migrate GUI colors test to original CSS color format)

r? `@ghost`
`@rustbot` modify labels: rollup
@bors bors merged commit 221039b into rust-lang:master May 23, 2023
@rustbot rustbot added this to the 1.71.0 milestone May 23, 2023
@fmease fmease deleted the pp-inh-proj branch May 23, 2023 22:03
matthiaskrgr added a commit to matthiaskrgr/rust that referenced this pull request May 24, 2023
…er-errors

Add regression tests for pretty-printing inherent projections

Tests for rust-lang#111486.
Fixes rust-lang#111879.

r? `@matthiaskrgr`
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
F-inherent_associated_types `#![feature(inherent_associated_types)]` S-waiting-on-bors Status: Waiting on bors to run and complete tests. Bors will change the label on completion. T-compiler Relevant to the compiler team, which will review and decide on the PR/issue.
Projects
5 participants