Skip to content

"Regression" - some static bounds incorrectly compiled in 1.63..=1.67 #112283

Closed
@QuineDot

Description

@QuineDot

Heads-up

The example below should not compile and currently does not compile, so this is going to be low priority.

However, the example compiled for 1.63 -- 1.67 inclusive (it doesn't compile in 1.62 or in 1.68 to current).

I didn't see anything that looked relevant in the release notes, and I figure there should at least be a test somewhere, so it doesn't start compiling again.

So this issue is primarily about making sure a test exists.

Code

I tried this code:

pub trait Trait {}

pub trait Assoc<'x> {
    type A: ?Sized;
}

impl<'x> Assoc<'x> for str { type A = &'x dyn Trait; }

pub fn assoc<T: 'static>() {}
pub fn assoc_helper<'a: 'a>() {
    assoc::< <str as Assoc<'a>>::A >();
}

I expected to see this happen: Inexplicably compile like it did during some exploration months ago. (Search for "this all works" for more examples with probably irrelevant variations if you're curious.)

Instead, this happened: Failed to compile, which makes more sense.

Version it worked on

It most recently worked on: Rust 1.67, and also 1.63, 1.64, 1.65, and 1.66.

Version with regression

1.68 to present.

Metadata

Metadata

Assignees

No one assigned

    Labels

    C-bugCategory: This is a bug.E-needs-testCall for participation: An issue has been fixed and does not reproduce, but no test has been added.P-lowLow priorityregression-from-stable-to-stablePerformance or correctness regression from one stable version to another.

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions