github.com/JimmyHuang454/JLS-go@v0.0.0-20230831150107-90d536585ba0/internal/types/testdata/check/stmt0.go (about) 1 // Copyright 2012 The Go Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style 3 // license that can be found in the LICENSE file. 4 5 // statements 6 7 package stmt0 8 9 func assignments0() (int, int) { 10 var a, b, c int 11 var ch chan int 12 f0 := func() {} 13 f1 := func() int { return 1 } 14 f2 := func() (int, int) { return 1, 2 } 15 f3 := func() (int, int, int) { return 1, 2, 3 } 16 17 a, b, c = 1, 2, 3 18 a, b, c = 1 /* ERROR "assignment mismatch: 3 variables but 2 values" */ , 2 19 a, b, c = 1 /* ERROR "assignment mismatch: 3 variables but 4 values" */ , 2, 3, 4 20 _, _, _ = a, b, c 21 22 a = f0 /* ERROR "used as value" */ () 23 a = f1() 24 a = f2 /* ERROR "assignment mismatch: 1 variable but f2 returns 2 values" */ () 25 a, b = f2() 26 a, b, c = f2 /* ERROR "assignment mismatch: 3 variables but f2 returns 2 values" */ () 27 a, b, c = f3() 28 a, b = f3 /* ERROR "assignment mismatch: 2 variables but f3 returns 3 values" */ () 29 30 a, b, c = <- /* ERROR "assignment mismatch: 3 variables but 1 value" */ ch 31 32 return /* ERROR "not enough return values\n\thave \(\)\n\twant \(int, int\)" */ 33 return 1 /* ERROR "not enough return values\n\thave \(number\)\n\twant \(int, int\)" */ 34 return 1, 2 35 return 1, 2, 3 /* ERROR "too many return values\n\thave \(number, number, number\)\n\twant \(int, int\)" */ 36 } 37 38 func assignments1() { 39 b, i, f, c, s := false, 1, 1.0, 1i, "foo" 40 b = i /* ERROR "cannot use .* in assignment" */ 41 i = f /* ERROR "cannot use .* in assignment" */ 42 f = c /* ERROR "cannot use .* in assignment" */ 43 c = s /* ERROR "cannot use .* in assignment" */ 44 s = b /* ERROR "cannot use .* in assignment" */ 45 46 v0, v1, v2 := 1 /* ERROR "assignment mismatch" */ , 2, 3, 4 47 _, _, _ = v0, v1, v2 48 49 b = true 50 51 i += 1 52 i /* ERROR "mismatched types int and untyped string" */+= "foo" 53 54 f -= 1 55 f /= 0 56 f = float32(0)/0 /* ERROR "division by zero" */ 57 f /* ERROR "mismatched types float64 and untyped string" */-= "foo" 58 59 c *= 1 60 c /= 0 61 62 s += "bar" 63 s /* ERROR "mismatched types string and untyped int" */+= 1 64 65 var u64 uint64 66 u64 += 1<<u64 67 68 undefined /* ERROR "undefined" */ = 991 69 70 // test cases for issue 5800 71 var ( 72 _ int = nil /* ERROR "cannot use nil as int value in variable declaration" */ 73 _ [10]int = nil /* ERROR "cannot use nil as \[10\]int value in variable declaration" */ 74 _ []byte = nil 75 _ struct{} = nil /* ERROR "cannot use nil as struct{} value in variable declaration" */ 76 _ func() = nil 77 _ map[int]string = nil 78 _ chan int = nil 79 ) 80 81 // test cases for issue 5500 82 _ = func() (int, bool) { 83 var m map[int]int 84 return m /* ERROR "not enough return values" */ [0] 85 } 86 87 g := func(int, bool){} 88 var m map[int]int 89 g(m[0]) /* ERROR "not enough arguments" */ 90 91 // assignments to _ 92 _ = nil /* ERROR "use of untyped nil" */ 93 _ = 1 << /* ERROR constant shift overflow */ 1000 94 (_) = 0 95 } 96 97 func assignments2() { 98 type mybool bool 99 var m map[string][]bool 100 var s []bool 101 var b bool 102 var d mybool 103 _ = s 104 _ = b 105 _ = d 106 107 // assignments to map index expressions are ok 108 s, b = m["foo"] 109 _, d = m["bar"] 110 m["foo"] = nil 111 m["foo"] = nil /* ERROR assignment mismatch: 1 variable but 2 values */ , false 112 _ = append(m["foo"]) 113 _ = append(m["foo"], true) 114 115 var c chan int 116 _, b = <-c 117 _, d = <-c 118 <- /* ERROR cannot assign */ c = 0 119 <-c = 0 /* ERROR assignment mismatch: 1 variable but 2 values */ , false 120 121 var x interface{} 122 _, b = x.(int) 123 x /* ERROR cannot assign */ .(int) = 0 124 x.(int) = 0 /* ERROR assignment mismatch: 1 variable but 2 values */ , false 125 126 assignments2 /* ERROR used as value */ () = nil 127 int /* ERROR not an expression */ = 0 128 } 129 130 func issue6487() { 131 type S struct{x int} 132 _ = &S /* ERROR "cannot take address" */ {}.x 133 _ = &( /* ERROR "cannot take address" */ S{}.x) 134 _ = (&S{}).x 135 S /* ERROR "cannot assign" */ {}.x = 0 136 (&S{}).x = 0 137 138 type M map[string]S 139 var m M 140 m /* ERROR "cannot assign to struct field" */ ["foo"].x = 0 141 _ = &( /* ERROR "cannot take address" */ m["foo"].x) 142 _ = &m /* ERROR "cannot take address" */ ["foo"].x 143 } 144 145 func issue6766a() { 146 a, a /* ERROR a repeated on left side of := */ := 1, 2 147 _ = a 148 a, b, b /* ERROR b repeated on left side of := */ := 1, 2, 3 149 _ = b 150 c, c /* ERROR c repeated on left side of := */, b := 1, 2, 3 151 _ = c 152 a, b := /* ERROR no new variables */ 1, 2 153 } 154 155 func shortVarDecls1() { 156 const c = 0 157 type d int 158 a, b, c /* ERROR "cannot assign" */ , d /* ERROR "cannot assign" */ := 1, "zwei", 3.0, 4 159 var _ int = a // a is of type int 160 var _ string = b // b is of type string 161 } 162 163 func incdecs() { 164 const c = 3.14 165 c /* ERROR "cannot assign" */ ++ 166 s := "foo" 167 s /* ERROR "invalid operation" */ -- 168 3.14 /* ERROR "cannot assign" */ ++ 169 var ( 170 x int 171 y float32 172 z complex128 173 ) 174 x++ 175 y-- 176 z++ 177 } 178 179 func sends() { 180 var ch chan int 181 var rch <-chan int 182 var x int 183 x <- /* ERROR "cannot send" */ x 184 rch <- /* ERROR "cannot send" */ x 185 ch <- "foo" /* ERROR "cannot use .* in send" */ 186 ch <- x 187 } 188 189 func selects() { 190 select {} 191 var ( 192 ch chan int 193 sc chan <- bool 194 ) 195 select { 196 case <-ch: 197 case (<-ch): 198 case t := <-ch: 199 _ = t 200 case t := (<-ch): 201 _ = t 202 case t, ok := <-ch: 203 _, _ = t, ok 204 case t, ok := (<-ch): 205 _, _ = t, ok 206 case <-sc /* ERROR "cannot receive from send-only channel" */ : 207 } 208 select { 209 default: 210 default /* ERROR "multiple defaults" */ : 211 } 212 select { 213 case a, b := <-ch: 214 _, b = a, b 215 case x /* ERROR send or receive */ : 216 case a /* ERROR send or receive */ := ch: 217 } 218 219 // test for issue 9570: ch2 in second case falsely resolved to 220 // ch2 declared in body of first case 221 ch1 := make(chan int) 222 ch2 := make(chan int) 223 select { 224 case <-ch1: 225 var ch2 /* ERROR ch2 declared and not used */ chan bool 226 case i := <-ch2: 227 print(i + 1) 228 } 229 } 230 231 func gos() { 232 go 1; /* ERROR "must be function call" */ 233 go int /* ERROR "go requires function call, not conversion" */ (0) 234 go ( /* ERROR expression in go must not be parenthesized */ gos()) 235 go gos() 236 var c chan int 237 go close(c) 238 go len /* ERROR "go discards result" */ (c) 239 } 240 241 func defers() { 242 defer 1; /* ERROR "must be function call" */ 243 defer int /* ERROR "defer requires function call, not conversion" */ (0) 244 defer ( /* ERROR expression in defer must not be parenthesized */ defers()) 245 defer defers() 246 var c chan int 247 defer close(c) 248 defer len /* ERROR "defer discards result" */ (c) 249 } 250 251 func breaks() { 252 var x, y int 253 254 break /* ERROR "break" */ 255 { 256 break /* ERROR "break" */ 257 } 258 if x < y { 259 break /* ERROR "break" */ 260 } 261 262 switch x { 263 case 0: 264 break 265 case 1: 266 if x == y { 267 break 268 } 269 default: 270 break 271 break 272 } 273 274 var z interface{} 275 switch z.(type) { 276 case int: 277 break 278 } 279 280 for { 281 break 282 } 283 284 var a []int 285 for _ = range a { 286 break 287 } 288 289 for { 290 if x == y { 291 break 292 } 293 } 294 295 var ch chan int 296 select { 297 case <-ch: 298 break 299 } 300 301 select { 302 case <-ch: 303 if x == y { 304 break 305 } 306 default: 307 break 308 } 309 } 310 311 func continues() { 312 var x, y int 313 314 continue /* ERROR "continue" */ 315 { 316 continue /* ERROR "continue" */ 317 } 318 319 if x < y { 320 continue /* ERROR "continue" */ 321 } 322 323 switch x { 324 case 0: 325 continue /* ERROR "continue" */ 326 } 327 328 var z interface{} 329 switch z.(type) { 330 case int: 331 continue /* ERROR "continue" */ 332 } 333 334 var ch chan int 335 select { 336 case <-ch: 337 continue /* ERROR "continue" */ 338 } 339 340 for i := 0; i < 10; i++ { 341 continue 342 if x < y { 343 continue 344 break 345 } 346 switch x { 347 case y: 348 continue 349 default: 350 break 351 } 352 select { 353 case <-ch: 354 continue 355 } 356 } 357 358 var a []int 359 for _ = range a { 360 continue 361 if x < y { 362 continue 363 break 364 } 365 switch x { 366 case y: 367 continue 368 default: 369 break 370 } 371 select { 372 case <-ch: 373 continue 374 } 375 } 376 } 377 378 func returns0() { 379 return 380 return 0 /* ERROR too many return values */ 381 } 382 383 func returns1(x float64) (int, *float64) { 384 return 0, &x 385 return /* ERROR not enough return values */ 386 return "foo" /* ERROR "cannot .* in return statement" */, x /* ERROR "cannot use .* in return statement" */ 387 return 0, &x, 1 /* ERROR too many return values */ 388 } 389 390 func returns2() (a, b int) { 391 return 392 return 1, "foo" /* ERROR cannot use .* in return statement */ 393 return 1, 2, 3 /* ERROR too many return values */ 394 { 395 type a int 396 return 1, 2 397 return /* ERROR a not in scope at return */ 398 } 399 } 400 401 func returns3() (_ int) { 402 return 403 { 404 var _ int // blank (_) identifiers never shadow since they are in no scope 405 return 406 } 407 } 408 409 func switches0() { 410 var x int 411 412 switch x { 413 } 414 415 switch x { 416 default: 417 default /* ERROR "multiple defaults" */ : 418 } 419 420 switch { 421 case 1 /* ERROR "cannot convert" */ : 422 } 423 424 true := "false" 425 _ = true 426 // A tagless switch is equivalent to the bool 427 // constant true, not the identifier 'true'. 428 switch { 429 case "false" /* ERROR "cannot convert" */: 430 } 431 432 switch int32(x) { 433 case 1, 2: 434 case x /* ERROR "invalid case x in switch on int32\(x\) \(mismatched types int and int32\)" */ : 435 } 436 437 switch x { 438 case 1 /* ERROR "overflows" */ << 100: 439 } 440 441 switch x { 442 case 1: 443 case 1 /* ERROR "duplicate case" */ : 444 case ( /* ERROR "duplicate case" */ 1): 445 case 2, 3, 4: 446 case 5, 1 /* ERROR "duplicate case" */ : 447 } 448 449 switch uint64(x) { 450 case 1<<64 - 1: 451 case 1 /* ERROR duplicate case */ <<64 - 1: 452 case 2, 3, 4: 453 case 5, 1 /* ERROR duplicate case */ <<64 - 1: 454 } 455 456 var y32 float32 457 switch y32 { 458 case 1.1: 459 case 11/10: // integer division! 460 case 11. /* ERROR duplicate case */ /10: 461 case 2, 3.0, 4.1: 462 case 5.2, 1.10 /* ERROR duplicate case */ : 463 } 464 465 var y64 float64 466 switch y64 { 467 case 1.1: 468 case 11/10: // integer division! 469 case 11. /* ERROR duplicate case */ /10: 470 case 2, 3.0, 4.1: 471 case 5.2, 1.10 /* ERROR duplicate case */ : 472 } 473 474 var s string 475 switch s { 476 case "foo": 477 case "foo" /* ERROR duplicate case */ : 478 case "f" /* ERROR duplicate case */ + "oo": 479 case "abc", "def", "ghi": 480 case "jkl", "foo" /* ERROR duplicate case */ : 481 } 482 483 type T int 484 type F float64 485 type S string 486 type B bool 487 var i interface{} 488 switch i { 489 case nil: 490 case nil: // no duplicate detection 491 case (*int)(nil): 492 case (*int)(nil): // do duplicate detection 493 case 1: 494 case byte(1): 495 case int /* ERROR duplicate case */ (1): 496 case T(1): 497 case 1.0: 498 case F(1.0): 499 case F /* ERROR duplicate case */ (1.0): 500 case "hello": 501 case S("hello"): 502 case S /* ERROR duplicate case */ ("hello"): 503 case 1==1, B(false): 504 case false, B(2==2): 505 } 506 507 // switch on array 508 var a [3]int 509 switch a { 510 case [3]int{1, 2, 3}: 511 case [3]int{1, 2, 3}: // no duplicate detection 512 case [ /* ERROR "mismatched types */ 4]int{4, 5, 6}: 513 } 514 515 // switch on channel 516 var c1, c2 chan int 517 switch c1 { 518 case nil: 519 case c1: 520 case c2: 521 case c1, c2: // no duplicate detection 522 } 523 } 524 525 func switches1() { 526 fallthrough /* ERROR "fallthrough statement out of place" */ 527 528 var x int 529 switch x { 530 case 0: 531 fallthrough /* ERROR "fallthrough statement out of place" */ 532 break 533 case 1: 534 fallthrough 535 case 2: 536 fallthrough; ; ; // trailing empty statements are ok 537 case 3: 538 default: 539 fallthrough; ; 540 case 4: 541 fallthrough /* ERROR "cannot fallthrough final case in switch" */ 542 } 543 544 var y interface{} 545 switch y.(type) { 546 case int: 547 fallthrough /* ERROR "cannot fallthrough in type switch" */ ; ; ; 548 default: 549 } 550 551 switch x { 552 case 0: 553 if x == 0 { 554 fallthrough /* ERROR "fallthrough statement out of place" */ 555 } 556 } 557 558 switch x { 559 case 0: 560 goto L1 561 L1: fallthrough; ; 562 case 1: 563 goto L2 564 goto L3 565 goto L4 566 L2: L3: L4: fallthrough 567 default: 568 } 569 570 switch x { 571 case 0: 572 goto L5 573 L5: fallthrough 574 default: 575 goto L6 576 goto L7 577 goto L8 578 L6: L7: L8: fallthrough /* ERROR "cannot fallthrough final case in switch" */ 579 } 580 581 switch x { 582 case 0: 583 fallthrough; ; 584 case 1: 585 { 586 fallthrough /* ERROR "fallthrough statement out of place" */ 587 } 588 case 2: 589 fallthrough 590 case 3: 591 fallthrough /* ERROR "fallthrough statement out of place" */ 592 { /* empty block is not an empty statement */ }; ; 593 default: 594 fallthrough /* ERROR "cannot fallthrough final case in switch" */ 595 } 596 597 switch x { 598 case 0: 599 { 600 fallthrough /* ERROR "fallthrough statement out of place" */ 601 } 602 } 603 } 604 605 func switches2() { 606 // untyped nil is not permitted as switch expression 607 switch nil /* ERROR "use of untyped nil" */ { 608 case 1, 2, "foo": // don't report additional errors here 609 } 610 611 // untyped constants are converted to default types 612 switch 1<<63-1 { 613 } 614 switch 1 /* ERROR "cannot use .* as int value.*\(overflows\)" */ << 63 { 615 } 616 var x int 617 switch 1.0 { 618 case 1.0, 2.0, x /* ERROR "mismatched types int and float64" */ : 619 } 620 switch x { 621 case 1.0: 622 } 623 624 // untyped bools become of type bool 625 type B bool 626 var b B = true 627 switch x == x { 628 case b /* ERROR "mismatched types B and bool" */ : 629 } 630 switch { 631 case b /* ERROR "mismatched types B and bool" */ : 632 } 633 } 634 635 func issue11667() { 636 switch 9223372036854775808 /* ERROR "cannot use .* as int value.*\(overflows\)" */ { 637 } 638 switch 9223372036854775808 /* ERROR "cannot use .* as int value.*\(overflows\)" */ { 639 case 9223372036854775808: 640 } 641 var x int 642 switch x { 643 case 9223372036854775808 /* ERROR "overflows int" */ : 644 } 645 var y float64 646 switch y { 647 case 9223372036854775808: 648 } 649 } 650 651 func issue11687() { 652 f := func() (_, _ int) { return } 653 switch f /* ERROR "multiple-value f" */ () { 654 } 655 var x int 656 switch f /* ERROR "multiple-value f" */ () { 657 case x: 658 } 659 switch x { 660 case f /* ERROR "multiple-value f" */ (): 661 } 662 } 663 664 type I interface { 665 m() 666 } 667 668 type I2 interface { 669 m(int) 670 } 671 672 type T struct{} 673 type T1 struct{} 674 type T2 struct{} 675 676 func (T) m() {} 677 func (T2) m(int) {} 678 679 func typeswitches() { 680 var i int 681 var x interface{} 682 683 switch x.(type) {} 684 switch (x /* ERROR "outside type switch" */ .(type)) {} 685 686 switch x.(type) { 687 default: 688 default /* ERROR "multiple defaults" */ : 689 } 690 691 switch x /* ERROR "declared and not used" */ := x.(type) {} 692 switch _ /* ERROR "no new variable on left side of :=" */ := x.(type) {} 693 694 switch x := x.(type) { 695 case int: 696 var y int = x 697 _ = y 698 } 699 700 switch x /* ERROR "x declared and not used" */ := i /* ERROR "not an interface" */ .(type) {} 701 702 switch t := x.(type) { 703 case nil: 704 var v bool = t /* ERROR "cannot use .* in variable declaration" */ 705 _ = v 706 case int: 707 var v int = t 708 _ = v 709 case float32, complex64: 710 var v float32 = t /* ERROR "cannot use .* in variable declaration" */ 711 _ = v 712 default: 713 var v float32 = t /* ERROR "cannot use .* in variable declaration" */ 714 _ = v 715 } 716 717 var t I 718 switch t.(type) { 719 case T: 720 case T1 /* ERROR "missing method m" */ : 721 case T2 /* ERROR "wrong type for method m" */ : 722 case I2 /* STRICT "wrong type for method m" */ : // only an error in strict mode (issue 8561) 723 } 724 725 726 { 727 x := 1 728 v := 2 729 switch v /* ERROR "v [(]variable of type int[)] is not an interface" */ .(type) { 730 case int: 731 println(x) 732 println(x / 0 /* ERROR "invalid operation: division by zero" */) 733 case 1 /* ERROR "1 is not a type" */: 734 } 735 } 736 } 737 738 // Test that each case clause uses the correct type of the variable 739 // declared by the type switch (issue 5504). 740 func typeswitch0() { 741 switch y := interface{}(nil).(type) { 742 case int: 743 func() int { return y + 0 }() 744 case float32: 745 func() float32 { return y }() 746 } 747 } 748 749 // Test correct scope setup. 750 // (no redeclaration errors expected in the type switch) 751 func typeswitch1() { 752 var t I 753 switch t := t; t := t.(type) { 754 case nil: 755 var _ I = t 756 case T: 757 var _ T = t 758 default: 759 var _ I = t 760 } 761 } 762 763 // Test correct typeswitch against interface types. 764 type A interface { a() } 765 type B interface { b() } 766 type C interface { a(int) } 767 768 func typeswitch2() { 769 switch A(nil).(type) { 770 case A: 771 case B: 772 case C /* STRICT "cannot have dynamic type" */: // only an error in strict mode (issue 8561) 773 } 774 } 775 776 func typeswitch3(x interface{}) { 777 switch x.(type) { 778 case int: 779 case float64: 780 case int /* ERROR duplicate case */ : 781 } 782 783 switch x.(type) { 784 case nil: 785 case int: 786 case nil /* ERROR duplicate case */ , nil /* ERROR duplicate case */ : 787 } 788 789 type F func(int) 790 switch x.(type) { 791 case nil: 792 case int, func(int): 793 case float32, func /* ERROR duplicate case */ (x int): 794 case F: 795 } 796 } 797 798 func fors1() { 799 for {} 800 var i string 801 _ = i 802 for i := 0; i < 10; i++ {} 803 for i := 0; i < 10; j /* ERROR cannot declare */ := 0 {} 804 } 805 806 func rangeloops1() { 807 var ( 808 x int 809 a [10]float32 810 b []string 811 p *[10]complex128 812 pp **[10]complex128 813 s string 814 m map[int]bool 815 c chan int 816 sc chan<- int 817 rc <-chan int 818 ) 819 820 for range x /* ERROR "cannot range over" */ {} 821 for _ = range x /* ERROR "cannot range over" */ {} 822 for i := range x /* ERROR "cannot range over" */ {} 823 824 for range a {} 825 for i := range a { 826 var ii int 827 ii = i 828 _ = ii 829 } 830 for i, x := range a { 831 var ii int 832 ii = i 833 _ = ii 834 var xx float64 835 xx = x /* ERROR "cannot use .* in assignment" */ 836 _ = xx 837 } 838 var ii int 839 var xx float32 840 for ii, xx = range a {} 841 _, _ = ii, xx 842 843 for range b {} 844 for i := range b { 845 var ii int 846 ii = i 847 _ = ii 848 } 849 for i, x := range b { 850 var ii int 851 ii = i 852 _ = ii 853 var xx string 854 xx = x 855 _ = xx 856 } 857 858 for range s {} 859 for i := range s { 860 var ii int 861 ii = i 862 _ = ii 863 } 864 for i, x := range s { 865 var ii int 866 ii = i 867 _ = ii 868 var xx rune 869 xx = x 870 _ = xx 871 } 872 873 for range p {} 874 for _, x := range p { 875 var xx complex128 876 xx = x 877 _ = xx 878 } 879 880 for range pp /* ERROR "cannot range over" */ {} 881 for _, x := range pp /* ERROR "cannot range over" */ {} 882 883 for range m {} 884 for k := range m { 885 var kk int32 886 kk = k /* ERROR "cannot use .* in assignment" */ 887 _ = kk 888 } 889 for k, v := range m { 890 var kk int 891 kk = k 892 _ = kk 893 if v {} 894 } 895 896 for range c {} 897 for _, _ /* ERROR "only one iteration variable" */ = range c {} 898 for e := range c { 899 var ee int 900 ee = e 901 _ = ee 902 } 903 for _ = range sc /* ERROR "cannot range over" */ {} 904 for _ = range rc {} 905 906 // constant strings 907 const cs = "foo" 908 for range cs {} 909 for range "" {} 910 for i, x := range cs { _, _ = i, x } 911 for i, x := range "" { 912 var ii int 913 ii = i 914 _ = ii 915 var xx rune 916 xx = x 917 _ = xx 918 } 919 } 920 921 func rangeloops2() { 922 type I int 923 type R rune 924 925 var a [10]int 926 var i I 927 _ = i 928 for i /* ERROR cannot use .* in assignment */ = range a {} 929 for i /* ERROR cannot use .* in assignment */ = range &a {} 930 for i /* ERROR cannot use .* in assignment */ = range a[:] {} 931 932 var s string 933 var r R 934 _ = r 935 for i /* ERROR cannot use .* in assignment */ = range s {} 936 for i /* ERROR cannot use .* in assignment */ = range "foo" {} 937 for _, r /* ERROR cannot use .* in assignment */ = range s {} 938 for _, r /* ERROR cannot use .* in assignment */ = range "foo" {} 939 } 940 941 func issue6766b() { 942 for _ := /* ERROR no new variables */ range "" {} 943 for a, a /* ERROR redeclared */ := range "" { _ = a } 944 var a int 945 _ = a 946 for a, a /* ERROR redeclared */ := range []int{1, 2, 3} { _ = a } 947 } 948 949 // Test that despite errors in the range clause, 950 // the loop body is still type-checked (and thus 951 // errors reported). 952 func issue10148() { 953 for y /* ERROR declared and not used */ := range "" { 954 _ = "" /* ERROR mismatched types untyped string and untyped int */ + 1 955 } 956 for range 1 /* ERROR cannot range over 1 */ { 957 _ = "" /* ERROR mismatched types untyped string and untyped int */ + 1 958 } 959 for y := range 1 /* ERROR cannot range over 1 */ { 960 _ = "" /* ERROR mismatched types untyped string and untyped int */ + 1 961 } 962 } 963 964 func labels0() { 965 goto L0 966 goto L1 967 L0: 968 L1: 969 L1 /* ERROR "already declared" */ : 970 if true { 971 goto L2 972 L2: 973 L0 /* ERROR "already declared" */ : 974 } 975 _ = func() { 976 goto L0 977 goto L1 978 goto L2 979 L0: 980 L1: 981 L2: 982 } 983 } 984 985 func expression_statements(ch chan int) { 986 expression_statements(ch) 987 <-ch 988 println() 989 990 0 /* ERROR "not used" */ 991 1 /* ERROR "not used" */ +2 992 cap /* ERROR "not used" */ (ch) 993 println /* ERROR "must be called" */ 994 }