diff options
| author | Jubilee <46493976+workingjubilee@users.noreply.github.com> | 2021-10-04 21:12:35 -0700 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2021-10-04 21:12:35 -0700 |
| commit | 05b4cd6789bf6eef76744246d54064fe3758123e (patch) | |
| tree | c95ac966d53347bbaf66e52b27a4c52acedd2cc8 /src | |
| parent | 7aa9ce55b91726d92770107bfaf5961163cd9388 (diff) | |
| parent | 051d5b0118186433cdb1e12c6198b877bfa0a8fc (diff) | |
| download | rust-05b4cd6789bf6eef76744246d54064fe3758123e.tar.gz rust-05b4cd6789bf6eef76744246d54064fe3758123e.zip | |
Rollup merge of #89413 - matthewjasper:spec-marker-fix, r=nikomatsakis
Correctly handle supertraits for min_specialization Supertraits of specialization markers could circumvent checks for min_specialization. Elaborating predicates prevents this. r? ````@nikomatsakis````
Diffstat (limited to 'src')
| -rw-r--r-- | src/test/ui/specialization/min_specialization/spec-marker-supertraits.rs | 29 | ||||
| -rw-r--r-- | src/test/ui/specialization/min_specialization/spec-marker-supertraits.stderr | 13 |
2 files changed, 42 insertions, 0 deletions
diff --git a/src/test/ui/specialization/min_specialization/spec-marker-supertraits.rs b/src/test/ui/specialization/min_specialization/spec-marker-supertraits.rs new file mode 100644 index 00000000000..3bb2480e9e2 --- /dev/null +++ b/src/test/ui/specialization/min_specialization/spec-marker-supertraits.rs @@ -0,0 +1,29 @@ +// Check that supertraits cannot be used to work around min_specialization +// limitations. + +#![feature(min_specialization)] +#![feature(rustc_attrs)] + +trait HasMethod { + fn method(&self); +} + +#[rustc_unsafe_specialization_marker] +trait Marker: HasMethod {} + +trait Spec { + fn spec_me(&self); +} + +impl<T> Spec for T { + default fn spec_me(&self) {} +} + +impl<T: Marker> Spec for T { + //~^ ERROR cannot specialize on trait `HasMethod` + fn spec_me(&self) { + self.method(); + } +} + +fn main() {} diff --git a/src/test/ui/specialization/min_specialization/spec-marker-supertraits.stderr b/src/test/ui/specialization/min_specialization/spec-marker-supertraits.stderr new file mode 100644 index 00000000000..964109dd10f --- /dev/null +++ b/src/test/ui/specialization/min_specialization/spec-marker-supertraits.stderr @@ -0,0 +1,13 @@ +error: cannot specialize on trait `HasMethod` + --> $DIR/spec-marker-supertraits.rs:22:1 + | +LL | / impl<T: Marker> Spec for T { +LL | | +LL | | fn spec_me(&self) { +LL | | self.method(); +LL | | } +LL | | } + | |_^ + +error: aborting due to previous error + |
