@@ -2466,3 +2466,217 @@ LL | ----cargo
24662466    let  renderer = Renderer :: plain ( ) . anonymized_line_numbers ( true ) ; 
24672467    assert_data_eq ! ( renderer. render( input) ,  expected) ; 
24682468} 
2469+ 
2470+ #[ test]  
2471+ fn  pat_tuple_field_count_cross ( )  { 
2472+     // tests/ui/pattern/pat-tuple-field-count-cross.stderr 
2473+ 
2474+     let  source = r#"//@ aux-build:declarations-for-tuple-field-count-errors.rs 
2475+ 
2476+ extern crate declarations_for_tuple_field_count_errors; 
2477+ 
2478+ use declarations_for_tuple_field_count_errors::*; 
2479+ 
2480+ fn main() { 
2481+     match Z0 { 
2482+         Z0() => {} //~ ERROR expected tuple struct or tuple variant, found unit struct `Z0` 
2483+         Z0(x) => {} //~ ERROR expected tuple struct or tuple variant, found unit struct `Z0` 
2484+     } 
2485+     match Z1() { 
2486+         Z1 => {} //~ ERROR match bindings cannot shadow tuple structs 
2487+         Z1(x) => {} //~ ERROR this pattern has 1 field, but the corresponding tuple struct has 0 fields 
2488+     } 
2489+ 
2490+     match S(1, 2, 3) { 
2491+         S() => {} //~ ERROR this pattern has 0 fields, but the corresponding tuple struct has 3 fields 
2492+         S(1) => {} //~ ERROR this pattern has 1 field, but the corresponding tuple struct has 3 fields 
2493+         S(xyz, abc) => {} //~ ERROR this pattern has 2 fields, but the corresponding tuple struct has 3 fields 
2494+         S(1, 2, 3, 4) => {} //~ ERROR this pattern has 4 fields, but the corresponding tuple struct has 3 fields 
2495+     } 
2496+     match M(1, 2, 3) { 
2497+         M() => {} //~ ERROR this pattern has 0 fields, but the corresponding tuple struct has 3 fields 
2498+         M(1) => {} //~ ERROR this pattern has 1 field, but the corresponding tuple struct has 3 fields 
2499+         M(xyz, abc) => {} //~ ERROR this pattern has 2 fields, but the corresponding tuple struct has 3 fields 
2500+         M(1, 2, 3, 4) => {} //~ ERROR this pattern has 4 fields, but the corresponding tuple struct has 3 fields 
2501+     } 
2502+ 
2503+     match E1::Z0 { 
2504+         E1::Z0() => {} //~ ERROR expected tuple struct or tuple variant, found unit variant `E1::Z0` 
2505+         E1::Z0(x) => {} //~ ERROR expected tuple struct or tuple variant, found unit variant `E1::Z0` 
2506+     } 
2507+     match E1::Z1() { 
2508+         E1::Z1 => {} //~ ERROR expected unit struct, unit variant or constant, found tuple variant `E1::Z1` 
2509+         E1::Z1(x) => {} //~ ERROR this pattern has 1 field, but the corresponding tuple variant has 0 fields 
2510+     } 
2511+     match E1::S(1, 2, 3) { 
2512+         E1::S() => {} //~ ERROR this pattern has 0 fields, but the corresponding tuple variant has 3 fields 
2513+         E1::S(1) => {} //~ ERROR this pattern has 1 field, but the corresponding tuple variant has 3 fields 
2514+         E1::S(xyz, abc) => {} //~ ERROR this pattern has 2 fields, but the corresponding tuple variant has 3 fields 
2515+         E1::S(1, 2, 3, 4) => {} //~ ERROR this pattern has 4 fields, but the corresponding tuple variant has 3 fields 
2516+     } 
2517+ 
2518+     match E2::S(1, 2, 3) { 
2519+         E2::S() => {} //~ ERROR this pattern has 0 fields, but the corresponding tuple variant has 3 fields 
2520+         E2::S(1) => {} //~ ERROR this pattern has 1 field, but the corresponding tuple variant has 3 fields 
2521+         E2::S(xyz, abc) => {} //~ ERROR this pattern has 2 fields, but the corresponding tuple variant has 3 fields 
2522+         E2::S(1, 2, 3, 4) => {} //~ ERROR this pattern has 4 fields, but the corresponding tuple variant has 3 fields 
2523+     } 
2524+     match E2::M(1, 2, 3) { 
2525+         E2::M() => {} //~ ERROR this pattern has 0 fields, but the corresponding tuple variant has 3 fields 
2526+         E2::M(1) => {} //~ ERROR this pattern has 1 field, but the corresponding tuple variant has 3 fields 
2527+         E2::M(xyz, abc) => {} //~ ERROR this pattern has 2 fields, but the corresponding tuple variant has 3 fields 
2528+         E2::M(1, 2, 3, 4) => {} //~ ERROR this pattern has 4 fields, but the corresponding tuple variant has 3 fields 
2529+     } 
2530+ } 
2531+ "# ; 
2532+     let  source1 = r#"pub struct Z0; 
2533+ pub struct Z1(); 
2534+ 
2535+ pub struct S(pub u8, pub u8, pub u8); 
2536+ pub struct M( 
2537+     pub u8, 
2538+     pub u8, 
2539+     pub u8, 
2540+ ); 
2541+ 
2542+ pub enum E1 { Z0, Z1(), S(u8, u8, u8) } 
2543+ 
2544+ pub enum E2 { 
2545+     S(u8, u8, u8), 
2546+     M( 
2547+         u8, 
2548+         u8, 
2549+         u8, 
2550+     ), 
2551+ } 
2552+ "# ; 
2553+ 
2554+     let  input = Level :: ERROR 
2555+         . header ( "expected unit struct, unit variant or constant, found tuple variant `E1::Z1`" ) 
2556+         . id ( r#"E0532"# ) 
2557+         . group ( 
2558+             Group :: new ( ) 
2559+                 . element ( 
2560+                     Snippet :: source ( source) 
2561+                         . origin ( "$DIR/pat-tuple-field-count-cross.rs" ) 
2562+                         . fold ( true ) 
2563+                         . annotation ( AnnotationKind :: Primary . span ( 1760 ..1766 ) ) , 
2564+                 ) 
2565+                 . element ( 
2566+                     Snippet :: source ( source1) 
2567+                         . origin ( "$DIR/auxiliary/declarations-for-tuple-field-count-errors.rs" ) 
2568+                         . fold ( true ) 
2569+                         . annotation ( 
2570+                             AnnotationKind :: Context 
2571+                                 . span ( 143 ..145 ) 
2572+                                 . label ( "`E1::Z1` defined here" ) , 
2573+                         ) 
2574+                         . annotation ( 
2575+                             AnnotationKind :: Context 
2576+                                 . span ( 139 ..141 ) 
2577+                                 . label ( "similarly named unit variant `Z0` defined here" ) , 
2578+                         ) , 
2579+                 ) , 
2580+         ) 
2581+         . group ( 
2582+             Group :: new ( ) 
2583+                 . element ( Level :: HELP . title ( "use the tuple variant pattern syntax instead" ) ) 
2584+                 . element ( 
2585+                     Snippet :: source ( source) 
2586+                         . origin ( "$DIR/pat-tuple-field-count-cross.rs" ) 
2587+                         . fold ( true ) 
2588+                         . patch ( Patch :: new ( 1760 ..1766 ,  r#"E1::Z1()"# ) ) , 
2589+                 ) , 
2590+         ) 
2591+         . group ( 
2592+             Group :: new ( ) 
2593+                 . element ( Level :: HELP . title ( "a unit variant with a similar name exists" ) ) 
2594+                 . element ( 
2595+                     Snippet :: source ( source) 
2596+                         . origin ( "$DIR/pat-tuple-field-count-cross.rs" ) 
2597+                         . fold ( true ) 
2598+                         . patch ( Patch :: new ( 1764 ..1766 ,  r#"Z0"# ) ) , 
2599+                 ) , 
2600+         ) ; 
2601+     let  expected = str![ [ r#" 
2602+ error[E0532]: expected unit struct, unit variant or constant, found tuple variant `E1::Z1` 
2603+   --> $DIR/pat-tuple-field-count-cross.rs:35:9 
2604+    | 
2605+ LL |         E1::Z1 => {} //~ ERROR expected unit struct, unit variant or constant, found tuple variant `E1::Z1` 
2606+    |         ^^^^^^ 
2607+    | 
2608+   ::: $DIR/auxiliary/declarations-for-tuple-field-count-errors.rs:11:19 
2609+    | 
2610+ LL | pub enum E1 { Z0, Z1(), S(u8, u8, u8) } 
2611+    |               --  -- `E1::Z1` defined here 
2612+    |               | 
2613+    |               similarly named unit variant `Z0` defined here 
2614+    | 
2615+ help: use the tuple variant pattern syntax instead 
2616+    | 
2617+ LL |         E1::Z1() => {} //~ ERROR expected unit struct, unit variant or constant, found tuple variant `E1::Z1` 
2618+    |               ++ 
2619+ help: a unit variant with a similar name exists 
2620+    | 
2621+ LL -         E1::Z1 => {} //~ ERROR expected unit struct, unit variant or constant, found tuple variant `E1::Z1` 
2622+ LL +         E1::Z0 => {} //~ ERROR expected unit struct, unit variant or constant, found tuple variant `E1::Z1` 
2623+    | 
2624+ "# ] ] ; 
2625+     let  renderer = Renderer :: plain ( ) . anonymized_line_numbers ( true ) ; 
2626+     assert_data_eq ! ( renderer. render( input) ,  expected) ; 
2627+ } 
2628+ 
2629+ #[ test]  
2630+ fn  unterminated_nested_comment ( )  { 
2631+     // tests/ui/lexer/unterminated-nested-comment.rs 
2632+ 
2633+     let  source = r#"/* //~ ERROR E0758 
2634+ /* */ 
2635+ /* 
2636+ */ 
2637+ "# ; 
2638+ 
2639+     let  input = Level :: ERROR . header ( "unterminated block comment" ) . id ( "E0758" ) . group ( 
2640+         Group :: new ( ) . element ( 
2641+             Snippet :: source ( source) 
2642+                 . origin ( "$DIR/unterminated-nested-comment.rs" ) 
2643+                 . fold ( true ) 
2644+                 . annotation ( 
2645+                     AnnotationKind :: Context 
2646+                         . span ( 0 ..2 ) 
2647+                         . label ( "unterminated block comment" ) , 
2648+                 ) 
2649+                 . annotation ( AnnotationKind :: Context . span ( 25 ..27 ) . label ( 
2650+                     "...as last nested comment starts here, maybe you want to close this instead?" , 
2651+                 ) ) 
2652+                 . annotation ( 
2653+                     AnnotationKind :: Context 
2654+                         . span ( 28 ..30 ) 
2655+                         . label ( "...and last nested comment terminates here." ) , 
2656+                 ) 
2657+                 . annotation ( AnnotationKind :: Primary . span ( 0 ..31 ) ) , 
2658+         ) , 
2659+     ) ; 
2660+ 
2661+     let  expected = str![ [ r#" 
2662+ error[E0758]: unterminated block comment 
2663+   --> $DIR/unterminated-nested-comment.rs:1:1 
2664+    | 
2665+ LL |   /* //~ ERROR E0758 
2666+    |   ^- 
2667+    |   | 
2668+    |  _unterminated block comment 
2669+    | | 
2670+ LL | | /* */ 
2671+ LL | | /* 
2672+    | | -- 
2673+    | | | 
2674+    | | ...as last nested comment starts here, maybe you want to close this instead? 
2675+ LL | | */ 
2676+    | |_--^ 
2677+    |   | 
2678+    |   ...and last nested comment terminates here. 
2679+ "# ] ] ; 
2680+     let  renderer = Renderer :: plain ( ) . anonymized_line_numbers ( true ) ; 
2681+     assert_data_eq ! ( renderer. render( input) ,  expected) ; 
2682+ } 
0 commit comments