diff options
| author | David Wood <david@davidtw.co> | 2018-12-09 03:07:31 +0100 |
|---|---|---|
| committer | David Wood <david@davidtw.co> | 2018-12-30 14:30:59 +0100 |
| commit | 95c18382cb01480b99b55163c19f35907de80eb4 (patch) | |
| tree | b69ab6e7896afbe6a401be810530e3e4bc2c5965 /src/test | |
| parent | 6092d92d70c81861ed46f2496e62dc74183857fd (diff) | |
| download | rust-95c18382cb01480b99b55163c19f35907de80eb4.tar.gz rust-95c18382cb01480b99b55163c19f35907de80eb4.zip | |
Fix unresolved inference variable ICE.
This commit moves well-formedness check for the `UserTypeAnnotation::Ty(..)` case from always running to only when the code is reachable. This solves the ICE that resulted from `src/test/ui/issue-54943-1.rs` (a minimal repro of `dropck-eyepatch` run-pass tests that failed). The main well-formedness check that was intended to be run despite unreachable code still is, that being the `UserTypeAnnotation::TypeOf(..)` case. Before this PR, the other case wasn't being checked at all. It is possible to fix this ICE while still always checking well-formedness for the `UserTypeAnnotation::Ty(..)` case but that solution will ICE in unreachable code for that case, the diff for that change [can be found here](0). [0]: https://gist.github.com/davidtwco/f9751ffd9c0508f7251c0f17adc3af53
Diffstat (limited to 'src/test')
| -rw-r--r-- | src/test/incremental/hashes/let_expressions.rs | 2 | ||||
| -rw-r--r-- | src/test/ui/issue-54943-1.rs | 15 | ||||
| -rw-r--r-- | src/test/ui/issue-54943-2.rs | 18 | ||||
| -rw-r--r-- | src/test/ui/regions/regions-free-region-ordering-caller1.nll.stderr | 2 |
4 files changed, 35 insertions, 2 deletions
diff --git a/src/test/incremental/hashes/let_expressions.rs b/src/test/incremental/hashes/let_expressions.rs index 3aa66527ca7..b6050f059c2 100644 --- a/src/test/incremental/hashes/let_expressions.rs +++ b/src/test/incremental/hashes/let_expressions.rs @@ -70,7 +70,7 @@ pub fn change_mutability_of_reference_type() { #[cfg(not(cfail1))] #[rustc_clean(cfg="cfail2", - except="HirBody,TypeckTables,MirValidated")] + except="HirBody,TypeckTables,MirValidated,MirOptimized")] #[rustc_clean(cfg="cfail3")] pub fn change_mutability_of_reference_type() { let _x: &mut u64; diff --git a/src/test/ui/issue-54943-1.rs b/src/test/ui/issue-54943-1.rs new file mode 100644 index 00000000000..7750e340361 --- /dev/null +++ b/src/test/ui/issue-54943-1.rs @@ -0,0 +1,15 @@ +#![feature(nll)] + +// This test is a minimal version of an ICE in the dropck-eyepatch tests +// found in the fix for #54943. + +// compile-pass + +fn foo<T>(_t: T) { +} + +fn main() { + struct A<'a, B: 'a>(&'a B); + let (a1, a2): (String, A<_>) = (String::from("auto"), A(&"this")); + foo((a1, a2)); +} diff --git a/src/test/ui/issue-54943-2.rs b/src/test/ui/issue-54943-2.rs new file mode 100644 index 00000000000..f829c38c35d --- /dev/null +++ b/src/test/ui/issue-54943-2.rs @@ -0,0 +1,18 @@ +#![feature(nll)] + +// This test is a minimal version of an ICE in the dropck-eyepatch tests +// found in the fix for #54943. In particular, this test is in unreachable +// code as the initial fix for this ICE only worked if the code was reachable. + +// compile-pass + +fn foo<T>(_t: T) { +} + +fn main() { + return; + + struct A<'a, B: 'a>(&'a B); + let (a1, a2): (String, A<_>) = (String::from("auto"), A(&"this")); + foo((a1, a2)); +} diff --git a/src/test/ui/regions/regions-free-region-ordering-caller1.nll.stderr b/src/test/ui/regions/regions-free-region-ordering-caller1.nll.stderr index abda7ec5e07..539343a6829 100644 --- a/src/test/ui/regions/regions-free-region-ordering-caller1.nll.stderr +++ b/src/test/ui/regions/regions-free-region-ordering-caller1.nll.stderr @@ -21,7 +21,7 @@ LL | fn call1<'a>(x: &'a usize) { LL | let z: &'a & usize = &(&y); | ----------- ^^^^ borrowed value does not live long enough | | - | assignment requires that `y` is borrowed for `'a` + | type annotation requires that `y` is borrowed for `'a` ... LL | } | - `y` dropped here while still borrowed |
