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

librustc: Check built-in trait bounds on implementations when direct #15957

Merged
merged 1 commit into from
Jul 25, 2014

Conversation

pcwalton
Copy link
Contributor

method calls are involved.

This breaks code like:

impl<T:Copy> Foo for T { ... }

fn take_param<T:Foo>(foo: &T) { ... }

fn main() {
    let x = box 3i; // note no `Copy` bound
    take_param(&x);
}

Change this code to not contain a type error. For example:

impl<T:Copy> Foo for T { ... }

fn take_param<T:Foo>(foo: &T) { ... }

fn main() {
    let x = 3i; // satisfies `Copy` bound
    take_param(&x);
}

Closes #15860.

[breaking-change]

r? @alexcrichton

@alexcrichton
Copy link
Member

This looks fine to me, but I'm not personally familiar enough with vtable-related code to render a verdict. Perhaps @nikomatsakis, @nick29581, or @pnkfelix could take a look?

@pcwalton
Copy link
Contributor Author

r? @pnkfelix

@pcwalton
Copy link
Contributor Author

Heh, we were relying on this in rustc.

method calls are involved.

This breaks code like:

    impl<T:Copy> Foo for T { ... }

    fn take_param<T:Foo>(foo: &T) { ... }

    fn main() {
        let x = box 3i; // note no `Copy` bound
        take_param(&x);
    }

Change this code to not contain a type error. For example:

    impl<T:Copy> Foo for T { ... }

    fn take_param<T:Foo>(foo: &T) { ... }

    fn main() {
        let x = 3i; // satisfies `Copy` bound
        take_param(&x);
    }

Closes rust-lang#15860.

[breaking-change]
bors added a commit that referenced this pull request Jul 25, 2014
…uonw,pnkfelix

method calls are involved.

This breaks code like:

    impl<T:Copy> Foo for T { ... }

    fn take_param<T:Foo>(foo: &T) { ... }

    fn main() {
        let x = box 3i; // note no `Copy` bound
        take_param(&x);
    }

Change this code to not contain a type error. For example:

    impl<T:Copy> Foo for T { ... }

    fn take_param<T:Foo>(foo: &T) { ... }

    fn main() {
        let x = 3i; // satisfies `Copy` bound
        take_param(&x);
    }

Closes #15860.

[breaking-change]

r? @alexcrichton
@bors bors closed this Jul 25, 2014
@bors bors merged commit f1520ea into rust-lang:master Jul 25, 2014
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

builtin bounds specified on impls are not checked
4 participants