Skip to content

T: Drop bound not satisfied from Option::unwrap_or (et. al) when Drop anti-bound is present #92111

Closed
@chorman0773

Description

@chorman0773
Contributor

Code

I tried this code:

pub trait NoDrop{}

impl<T: Drop> NoDrop for T{}

#[derive(Debug)]
pub struct DoesNotHaveDrop(i32);

impl NoDrop for DoesNotHaveDrop{}

fn main() {
    let x = Some(DoesNotHaveDrop(0));
    println!("{:?}",x.unwrap_or(DoesNotHaveDrop(0)))
}

I expected to see this happen: print DoesNotHaveDrop(0) (from Debug impl)

Instead, this happened: E0277, trait impl DoesNotHaveDrop: Drop not found

This was found by CI in the Ruffle Project: https://github.com/ruffle-rs/ruffle/runs/4576592287?check_suite_focus=true

The issue is caused by the effective anti-bound of Drop, introduced by the manual impl of the NoDrop trait, as well as the PR #91928 which introduced ~const Drop bounds for a number of functions in Option.

Version it worked on

It most recently worked on: rustc 1.59.0-nightly (7abab1e 2021-12-18)

Version with regression

rustc --version --verbose:

rustc 1.59.0-nightly (91a0600a5 2021-12-18)

@rustbot modify labels: +regression-from-stable-to-nightly -regression-untriaged

Activity

added
I-prioritizeIssue: Indicates that prioritization has been requested for this issue.
and removed
regression-untriagedUntriaged performance or correctness regression.
on Dec 20, 2021
added this to the 1.59.0 milestone on Dec 20, 2021
ecstatic-morse

ecstatic-morse commented on Dec 20, 2021

@ecstatic-morse
Contributor
self-assigned this
on Dec 21, 2021
removed
I-prioritizeIssue: Indicates that prioritization has been requested for this issue.
on Dec 21, 2021
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Labels

C-bugCategory: This is a bug.regression-from-stable-to-nightlyPerformance or correctness regression from stable to nightly.

Type

No type

Projects

No projects

Relationships

None yet

    Development

    Participants

    @chorman0773@Mark-Simulacrum@ecstatic-morse@fee1-dead@rustbot

    Issue actions

      `T: Drop` bound not satisfied from Option::unwrap_or (et. al) when Drop anti-bound is present · Issue #92111 · rust-lang/rust