Skip to content

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

Merged
bors merged 1 commit into
rust-lang:masterfrom
pcwalton:builtin-bound-impl-checking
Jul 25, 2014
Merged

librustc: Check built-in trait bounds on implementations when direct#15957
bors merged 1 commit into
rust-lang:masterfrom
pcwalton:builtin-bound-impl-checking

Conversation

@pcwalton

Copy link
Copy Markdown
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
Copy Markdown
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
Copy Markdown
Contributor Author

r? @pnkfelix

@pcwalton

Copy link
Copy Markdown
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