diff options
| author | Matthias Krüger <matthias.krueger@famsik.de> | 2024-02-19 13:04:33 +0100 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2024-02-19 13:04:33 +0100 |
| commit | 25bba60e9ded0b3ace1f7f45933dcafdb241cf28 (patch) | |
| tree | 986b05ed18265fe5a37a58ec428a67c254eb5fbd | |
| parent | c5da0382c83ddb3fc6c04c9a9d38518d261af203 (diff) | |
| parent | e9cda9b139548ca096f5fb5f9823bee259f267be (diff) | |
| download | rust-25bba60e9ded0b3ace1f7f45933dcafdb241cf28.tar.gz rust-25bba60e9ded0b3ace1f7f45933dcafdb241cf28.zip | |
Rollup merge of #121032 - oli-obk:cyclic_type_ice, r=cjgillot
Continue reporting remaining errors instead of silently dropping them I was too eager to add assertions in https://github.com/rust-lang/rust/pull/120342/files#diff-593003090e0fb5c21f31413ce5feb506e235ec33c4775da88b853980429b9ff1R741 fixes #120864
| -rw-r--r-- | compiler/rustc_hir_typeck/src/fn_ctxt/checks.rs | 5 | ||||
| -rw-r--r-- | tests/ui/typeck/cyclic_type_ice.rs | 7 | ||||
| -rw-r--r-- | tests/ui/typeck/cyclic_type_ice.stderr | 31 |
3 files changed, 41 insertions, 2 deletions
diff --git a/compiler/rustc_hir_typeck/src/fn_ctxt/checks.rs b/compiler/rustc_hir_typeck/src/fn_ctxt/checks.rs index d8d3d45dd40..71e06aee730 100644 --- a/compiler/rustc_hir_typeck/src/fn_ctxt/checks.rs +++ b/compiler/rustc_hir_typeck/src/fn_ctxt/checks.rs @@ -740,8 +740,9 @@ impl<'a, 'tcx> FnCtxt<'a, 'tcx> { }); // We're done if we found errors, but we already emitted them. - if let Some(reported) = reported { - assert!(errors.is_empty()); + if let Some(reported) = reported + && errors.is_empty() + { return reported; } assert!(!errors.is_empty()); diff --git a/tests/ui/typeck/cyclic_type_ice.rs b/tests/ui/typeck/cyclic_type_ice.rs new file mode 100644 index 00000000000..7899b354f38 --- /dev/null +++ b/tests/ui/typeck/cyclic_type_ice.rs @@ -0,0 +1,7 @@ +fn thing() { + let f = |_, _| (); + f(f); //~ ERROR: closure/coroutine type that references itself + //~^ ERROR: this function takes 2 arguments but 1 argument was supplied +} + +fn main() {} diff --git a/tests/ui/typeck/cyclic_type_ice.stderr b/tests/ui/typeck/cyclic_type_ice.stderr new file mode 100644 index 00000000000..bfff6830fc5 --- /dev/null +++ b/tests/ui/typeck/cyclic_type_ice.stderr @@ -0,0 +1,31 @@ +error[E0644]: closure/coroutine type that references itself + --> $DIR/cyclic_type_ice.rs:3:7 + | +LL | f(f); + | ^ cyclic type of infinite size + | + = note: closures cannot capture themselves or take themselves as argument; + this error may be the result of a recent compiler bug-fix, + see issue #46062 <https://github.com/rust-lang/rust/issues/46062> + for more information + +error[E0057]: this function takes 2 arguments but 1 argument was supplied + --> $DIR/cyclic_type_ice.rs:3:5 + | +LL | f(f); + | ^--- an argument is missing + | +note: closure defined here + --> $DIR/cyclic_type_ice.rs:2:13 + | +LL | let f = |_, _| (); + | ^^^^^^ +help: provide the argument + | +LL | f(/* */, /* */); + | ~~~~~~~~~~~~~~~~ + +error: aborting due to 2 previous errors + +Some errors have detailed explanations: E0057, E0644. +For more information about an error, try `rustc --explain E0057`. |
