let ret = f(self);
let last_token = if self.token_cursor.stack.len() == prev {
&mut self.token_cursor.frame.last_token
+ } else if self.token_cursor.stack.is_empty() {//&& !self.unclosed_delims.is_empty() {
+ // This can happen with mismatched delimiters (#62881)
+ return Ok((ret?, TokenStream::new(vec![])));
} else {
&mut self.token_cursor.stack[prev].last_token
};
--- /dev/null
+fn main() {}
+
+fn f() -> isize { fn f() -> isize {} pub f<
+//~^ ERROR missing `fn` or `struct` for function or struct definition
+//~| ERROR mismatched types
+//~ ERROR this file contains an un-closed delimiter
--- /dev/null
+error: this file contains an un-closed delimiter
+ --> $DIR/issue-62881.rs:6:53
+ |
+LL | fn f() -> isize { fn f() -> isize {} pub f<
+ | - un-closed delimiter
+...
+LL |
+ | ^
+
+error: missing `fn` or `struct` for function or struct definition
+ --> $DIR/issue-62881.rs:3:41
+ |
+LL | fn f() -> isize { fn f() -> isize {} pub f<
+ | ^
+
+error[E0308]: mismatched types
+ --> $DIR/issue-62881.rs:3:29
+ |
+LL | fn f() -> isize { fn f() -> isize {} pub f<
+ | - ^^^^^ expected isize, found ()
+ | |
+ | this function's body doesn't return
+ |
+ = note: expected type `isize`
+ found type `()`
+
+error: aborting due to 3 previous errors
+
+For more information about this error, try `rustc --explain E0308`.