diff options
| author | Matthias Krüger <matthias.krueger@famsik.de> | 2020-05-29 22:46:05 +0200 |
|---|---|---|
| committer | Matthias Krüger <matthias.krueger@famsik.de> | 2020-05-29 22:52:24 +0200 |
| commit | b92cc8a08d74fb412bc444a4361df51b0c95401c (patch) | |
| tree | d95beec11b47a25e041ce5a9fb8ba4f02fa5920e | |
| parent | 7ea7cd165ad6705603852771bf82cc2fd6560db5 (diff) | |
| download | rust-b92cc8a08d74fb412bc444a4361df51b0c95401c.tar.gz rust-b92cc8a08d74fb412bc444a4361df51b0c95401c.zip | |
add testcase that no longer ICEs
Fixes #3969
| -rw-r--r-- | tests/ui/crashes/ice-3969.rs | 51 | ||||
| -rw-r--r-- | tests/ui/crashes/ice-3969.stderr | 22 |
2 files changed, 73 insertions, 0 deletions
diff --git a/tests/ui/crashes/ice-3969.rs b/tests/ui/crashes/ice-3969.rs new file mode 100644 index 00000000000..4feab7910b7 --- /dev/null +++ b/tests/ui/crashes/ice-3969.rs @@ -0,0 +1,51 @@ +// https://github.com/rust-lang/rust-clippy/issues/3969 +// used to crash: error: internal compiler error: +// src/librustc_traits/normalize_erasing_regions.rs:43: could not fully normalize `<i32 as +// std::iter::Iterator>::Item test from rustc ./ui/trivial-bounds/trivial-bounds-inconsistent.rs + +// Check that tautalogically false bounds are accepted, and are used +// in type inference. +#![feature(trivial_bounds)] +#![allow(unused)] + +trait A {} + +impl A for i32 {} + +struct Dst<X: ?Sized> { + x: X, +} + +struct TwoStrs(str, str) +where + str: Sized; + +fn unsized_local() +where + for<'a> Dst<A + 'a>: Sized, +{ + let x: Dst<A> = *(Box::new(Dst { x: 1 }) as Box<Dst<A>>); +} + +fn return_str() -> str +where + str: Sized, +{ + *"Sized".to_string().into_boxed_str() +} + +fn use_op(s: String) -> String +where + String: ::std::ops::Neg<Output = String>, +{ + -s +} + +fn use_for() +where + i32: Iterator, +{ + for _ in 2i32 {} +} + +fn main() {} diff --git a/tests/ui/crashes/ice-3969.stderr b/tests/ui/crashes/ice-3969.stderr new file mode 100644 index 00000000000..923db0664a7 --- /dev/null +++ b/tests/ui/crashes/ice-3969.stderr @@ -0,0 +1,22 @@ +error: trait objects without an explicit `dyn` are deprecated + --> $DIR/ice-3969.rs:25:17 + | +LL | for<'a> Dst<A + 'a>: Sized, + | ^^^^^^ help: use `dyn`: `dyn A + 'a` + | + = note: `-D bare-trait-objects` implied by `-D warnings` + +error: trait objects without an explicit `dyn` are deprecated + --> $DIR/ice-3969.rs:27:16 + | +LL | let x: Dst<A> = *(Box::new(Dst { x: 1 }) as Box<Dst<A>>); + | ^ help: use `dyn`: `dyn A` + +error: trait objects without an explicit `dyn` are deprecated + --> $DIR/ice-3969.rs:27:57 + | +LL | let x: Dst<A> = *(Box::new(Dst { x: 1 }) as Box<Dst<A>>); + | ^ help: use `dyn`: `dyn A` + +error: aborting due to 3 previous errors + |
