mirror of
				https://github.com/rust-lang/rust.git
				synced 2025-11-04 06:56:14 +00:00 
			
		
		
		
	Currently the parser will interpret any label/lifetime in certain positions as a mistyped char literal, on the assumption that the trailing single quote was accidentally omitted. This is reasonable for a something like 'a (because 'a' would be valid) but not reasonable for a something like 'abc (because 'abc' is not valid). This commit restricts this behaviour only to labels/lifetimes that would be valid char literals, via the new `could_be_unclosed_char_literal` function. The commit also augments the `label-is-actually-char.rs` test in a couple of ways: - Adds testing of labels/lifetimes with identifiers longer than one char, e.g. 'abc. - Adds a new match with simpler patterns, because the `recover_unclosed_char` call in `parse_pat_with_range_pat` was not being exercised (in this test or any other ui tests). Fixes #120397, an assertion failure, which was caused by this behaviour in the parser interacting with some new stricter char literal checking added in #120329.
		
			
				
	
	
		
			94 lines
		
	
	
		
			2.4 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			94 lines
		
	
	
		
			2.4 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
error: expected `while`, `for`, `loop` or `{` after a label
 | 
						|
  --> $DIR/label-is-actually-char.rs:5:15
 | 
						|
   |
 | 
						|
LL |     let c = 'a;
 | 
						|
   |               ^ expected `while`, `for`, `loop` or `{` after a label
 | 
						|
   |
 | 
						|
help: add `'` to close the char literal
 | 
						|
   |
 | 
						|
LL |     let c = 'a';
 | 
						|
   |               +
 | 
						|
 | 
						|
error: expected `while`, `for`, `loop` or `{` after a label
 | 
						|
  --> $DIR/label-is-actually-char.rs:9:17
 | 
						|
   |
 | 
						|
LL |     let c = 'abc;
 | 
						|
   |                 ^ expected `while`, `for`, `loop` or `{` after a label
 | 
						|
 | 
						|
error: expected expression, found `;`
 | 
						|
  --> $DIR/label-is-actually-char.rs:9:17
 | 
						|
   |
 | 
						|
LL |     let c = 'abc;
 | 
						|
   |                 ^ expected expression
 | 
						|
 | 
						|
error: unexpected token: `'b`
 | 
						|
  --> $DIR/label-is-actually-char.rs:16:15
 | 
						|
   |
 | 
						|
LL |         'a'..='b => {}
 | 
						|
   |               ^^
 | 
						|
   |
 | 
						|
help: add `'` to close the char literal
 | 
						|
   |
 | 
						|
LL |         'a'..='b' => {}
 | 
						|
   |                 +
 | 
						|
 | 
						|
error: unexpected token: `'def`
 | 
						|
  --> $DIR/label-is-actually-char.rs:19:15
 | 
						|
   |
 | 
						|
LL |         'c'..='def => {}
 | 
						|
   |               ^^^^
 | 
						|
 | 
						|
error: expected pattern, found `=>`
 | 
						|
  --> $DIR/label-is-actually-char.rs:26:11
 | 
						|
   |
 | 
						|
LL |        'g => {}
 | 
						|
   |           ^^ expected pattern
 | 
						|
   |
 | 
						|
help: add `'` to close the char literal
 | 
						|
   |
 | 
						|
LL |        'g' => {}
 | 
						|
   |          +
 | 
						|
 | 
						|
error: expected pattern, found `'hij`
 | 
						|
  --> $DIR/label-is-actually-char.rs:29:8
 | 
						|
   |
 | 
						|
LL |        'hij => {}
 | 
						|
   |        ^^^^ expected pattern
 | 
						|
 | 
						|
error: expected `while`, `for`, `loop` or `{` after a label
 | 
						|
  --> $DIR/label-is-actually-char.rs:36:15
 | 
						|
   |
 | 
						|
LL |    let x = ['a, 'b, 'cde];
 | 
						|
   |               ^ expected `while`, `for`, `loop` or `{` after a label
 | 
						|
   |
 | 
						|
help: add `'` to close the char literal
 | 
						|
   |
 | 
						|
LL |    let x = ['a', 'b, 'cde];
 | 
						|
   |               +
 | 
						|
 | 
						|
error: expected `while`, `for`, `loop` or `{` after a label
 | 
						|
  --> $DIR/label-is-actually-char.rs:36:19
 | 
						|
   |
 | 
						|
LL |    let x = ['a, 'b, 'cde];
 | 
						|
   |                   ^ expected `while`, `for`, `loop` or `{` after a label
 | 
						|
   |
 | 
						|
help: add `'` to close the char literal
 | 
						|
   |
 | 
						|
LL |    let x = ['a, 'b', 'cde];
 | 
						|
   |                   +
 | 
						|
 | 
						|
error: expected `while`, `for`, `loop` or `{` after a label
 | 
						|
  --> $DIR/label-is-actually-char.rs:36:25
 | 
						|
   |
 | 
						|
LL |    let x = ['a, 'b, 'cde];
 | 
						|
   |                         ^ expected `while`, `for`, `loop` or `{` after a label
 | 
						|
 | 
						|
error: expected expression, found `]`
 | 
						|
  --> $DIR/label-is-actually-char.rs:36:25
 | 
						|
   |
 | 
						|
LL |    let x = ['a, 'b, 'cde];
 | 
						|
   |                         ^ expected expression
 | 
						|
 | 
						|
error: aborting due to 11 previous errors
 | 
						|
 |