github.com/powerman/golang-tools@v0.1.11-0.20220410185822-5ad214d8d803/go/analysis/passes/unreachable/testdata/src/a/a.go.golden (about)

     1  // Copyright 2020 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  package unreachable
     6  
     7  // This file produces masses of errors from the type checker due to
     8  // missing returns statements and other things.
     9  
    10  type T int
    11  
    12  var x interface{}
    13  var c chan int
    14  
    15  func external() int // ok
    16  
    17  func _() int {
    18  }
    19  
    20  func _() int {
    21  	print(1)
    22  }
    23  
    24  func _() int {
    25  	print(1)
    26  	return 2
    27  	// want "unreachable code"
    28  }
    29  
    30  func _() int {
    31  L:
    32  	print(1)
    33  	goto L
    34  	// want "unreachable code"
    35  }
    36  
    37  func _() int {
    38  	print(1)
    39  	panic(2)
    40  	// want "unreachable code"
    41  }
    42  
    43  // but only builtin panic
    44  func _() int {
    45  	var panic = func(int) {}
    46  	print(1)
    47  	panic(2)
    48  	println() // ok
    49  }
    50  
    51  func _() int {
    52  	{
    53  		print(1)
    54  		return 2
    55  		// want "unreachable code"
    56  	}
    57  	println() // ok
    58  }
    59  
    60  func _() int {
    61  	{
    62  		print(1)
    63  		return 2
    64  	}
    65  	// want "unreachable code"
    66  }
    67  
    68  func _() int {
    69  L:
    70  	{
    71  		print(1)
    72  		goto L
    73  		// want "unreachable code"
    74  	}
    75  	println() // ok
    76  }
    77  
    78  func _() int {
    79  L:
    80  	{
    81  		print(1)
    82  		goto L
    83  	}
    84  	// want "unreachable code"
    85  }
    86  
    87  func _() int {
    88  	print(1)
    89  	{
    90  		panic(2)
    91  	}
    92  }
    93  
    94  func _() int {
    95  	print(1)
    96  	{
    97  		panic(2)
    98  		// want "unreachable code"
    99  	}
   100  }
   101  
   102  func _() int {
   103  	print(1)
   104  	{
   105  		panic(2)
   106  	}
   107  	// want "unreachable code"
   108  }
   109  
   110  func _() int {
   111  	print(1)
   112  	return 2
   113  
   114  }
   115  
   116  func _() int {
   117  L:
   118  	print(1)
   119  	goto L
   120  
   121  }
   122  
   123  func _() int {
   124  	print(1)
   125  	panic(2)
   126  
   127  }
   128  
   129  func _() int {
   130  	{
   131  		print(1)
   132  		return 2
   133  
   134  	}
   135  }
   136  
   137  func _() int {
   138  L:
   139  	{
   140  		print(1)
   141  		goto L
   142  
   143  	}
   144  }
   145  
   146  func _() int {
   147  	print(1)
   148  	{
   149  		panic(2)
   150  
   151  	}
   152  }
   153  
   154  func _() int {
   155  	{
   156  		print(1)
   157  		return 2
   158  	}
   159  
   160  }
   161  
   162  func _() int {
   163  L:
   164  	{
   165  		print(1)
   166  		goto L
   167  	}
   168  
   169  }
   170  
   171  func _() int {
   172  	print(1)
   173  	{
   174  		panic(2)
   175  	}
   176  
   177  }
   178  
   179  func _() int {
   180  	print(1)
   181  	if x == nil {
   182  		panic(2)
   183  	} else {
   184  		panic(3)
   185  	}
   186  	// want "unreachable code"
   187  }
   188  
   189  func _() int {
   190  L:
   191  	print(1)
   192  	if x == nil {
   193  		panic(2)
   194  	} else {
   195  		goto L
   196  	}
   197  	// want "unreachable code"
   198  }
   199  
   200  func _() int {
   201  L:
   202  	print(1)
   203  	if x == nil {
   204  		panic(2)
   205  	} else if x == 1 {
   206  		return 0
   207  	} else if x != 2 {
   208  		panic(3)
   209  	} else {
   210  		goto L
   211  	}
   212  	// want "unreachable code"
   213  }
   214  
   215  // if-else chain missing final else is not okay, even if the
   216  // conditions cover every possible case.
   217  
   218  func _() int {
   219  	print(1)
   220  	if x == nil {
   221  		panic(2)
   222  	} else if x != nil {
   223  		panic(3)
   224  	}
   225  	println() // ok
   226  }
   227  
   228  func _() int {
   229  	print(1)
   230  	if x == nil {
   231  		panic(2)
   232  	}
   233  	println() // ok
   234  }
   235  
   236  func _() int {
   237  L:
   238  	print(1)
   239  	if x == nil {
   240  		panic(2)
   241  	} else if x == 1 {
   242  		return 0
   243  	} else if x != 1 {
   244  		panic(3)
   245  	}
   246  	println() // ok
   247  }
   248  
   249  func _() int {
   250  	print(1)
   251  	for {
   252  	}
   253  	// want "unreachable code"
   254  }
   255  
   256  func _() int {
   257  	for {
   258  		for {
   259  			break
   260  		}
   261  	}
   262  	// want "unreachable code"
   263  }
   264  
   265  func _() int {
   266  	for {
   267  		for {
   268  			break
   269  			// want "unreachable code"
   270  		}
   271  	}
   272  }
   273  
   274  func _() int {
   275  	for {
   276  		for {
   277  			continue
   278  			// want "unreachable code"
   279  		}
   280  	}
   281  }
   282  
   283  func _() int {
   284  	for {
   285  	L:
   286  		for {
   287  			break L
   288  		}
   289  	}
   290  	// want "unreachable code"
   291  }
   292  
   293  func _() int {
   294  	print(1)
   295  	for {
   296  		break
   297  	}
   298  	println() // ok
   299  }
   300  
   301  func _() int {
   302  	for {
   303  		for {
   304  		}
   305  		// want "unreachable code"
   306  	}
   307  	println() // ok
   308  }
   309  
   310  func _() int {
   311  L:
   312  	for {
   313  		for {
   314  			break L
   315  		}
   316  	}
   317  	println() // ok
   318  }
   319  
   320  func _() int {
   321  	print(1)
   322  	for x == nil {
   323  	}
   324  	println() // ok
   325  }
   326  
   327  func _() int {
   328  	for x == nil {
   329  		for {
   330  			break
   331  		}
   332  	}
   333  	println() // ok
   334  }
   335  
   336  func _() int {
   337  	for x == nil {
   338  	L:
   339  		for {
   340  			break L
   341  		}
   342  	}
   343  	println() // ok
   344  }
   345  
   346  func _() int {
   347  	print(1)
   348  	for true {
   349  	}
   350  	println() // ok
   351  }
   352  
   353  func _() int {
   354  	for true {
   355  		for {
   356  			break
   357  		}
   358  	}
   359  	println() // ok
   360  }
   361  
   362  func _() int {
   363  	for true {
   364  	L:
   365  		for {
   366  			break L
   367  		}
   368  	}
   369  	println() // ok
   370  }
   371  
   372  func _() int {
   373  	print(1)
   374  	select {}
   375  	// want "unreachable code"
   376  }
   377  
   378  func _() int {
   379  	print(1)
   380  	select {
   381  	case <-c:
   382  		print(2)
   383  		panic("abc")
   384  		// want "unreachable code"
   385  	}
   386  }
   387  
   388  func _() int {
   389  	print(1)
   390  	select {
   391  	case <-c:
   392  		print(2)
   393  		panic("abc")
   394  	}
   395  	// want "unreachable code"
   396  }
   397  
   398  func _() int {
   399  	print(1)
   400  	select {
   401  	case <-c:
   402  		print(2)
   403  		for {
   404  		}
   405  		// want "unreachable code"
   406  	}
   407  }
   408  
   409  func _() int {
   410  	print(1)
   411  	select {
   412  	case <-c:
   413  		print(2)
   414  		for {
   415  		}
   416  	}
   417  	// want "unreachable code"
   418  }
   419  
   420  func _() int {
   421  L:
   422  	print(1)
   423  	select {
   424  	case <-c:
   425  		print(2)
   426  		panic("abc")
   427  		// want "unreachable code"
   428  	case c <- 1:
   429  		print(2)
   430  		goto L
   431  		// want "unreachable code"
   432  	}
   433  }
   434  
   435  func _() int {
   436  L:
   437  	print(1)
   438  	select {
   439  	case <-c:
   440  		print(2)
   441  		panic("abc")
   442  	case c <- 1:
   443  		print(2)
   444  		goto L
   445  	}
   446  	// want "unreachable code"
   447  }
   448  
   449  func _() int {
   450  	print(1)
   451  	select {
   452  	case <-c:
   453  		print(2)
   454  		panic("abc")
   455  		// want "unreachable code"
   456  	default:
   457  		select {}
   458  		// want "unreachable code"
   459  	}
   460  }
   461  
   462  func _() int {
   463  	print(1)
   464  	select {
   465  	case <-c:
   466  		print(2)
   467  		panic("abc")
   468  	default:
   469  		select {}
   470  	}
   471  	// want "unreachable code"
   472  }
   473  
   474  func _() int {
   475  	print(1)
   476  	select {
   477  	case <-c:
   478  		print(2)
   479  	}
   480  	println() // ok
   481  }
   482  
   483  func _() int {
   484  L:
   485  	print(1)
   486  	select {
   487  	case <-c:
   488  		print(2)
   489  		panic("abc")
   490  		// want "unreachable code"
   491  	case c <- 1:
   492  		print(2)
   493  	}
   494  	println() // ok
   495  }
   496  
   497  func _() int {
   498  	print(1)
   499  	select {
   500  	case <-c:
   501  		print(2)
   502  		panic("abc")
   503  	default:
   504  		print(2)
   505  	}
   506  	println() // ok
   507  }
   508  
   509  func _() int {
   510  	print(1)
   511  	select {
   512  	default:
   513  		break
   514  	}
   515  	println() // ok
   516  }
   517  
   518  func _() int {
   519  	print(1)
   520  	select {
   521  	case <-c:
   522  		print(2)
   523  		panic("abc")
   524  		// want "unreachable code"
   525  	}
   526  	println() // ok
   527  }
   528  
   529  func _() int {
   530  	print(1)
   531  L:
   532  	select {
   533  	case <-c:
   534  		print(2)
   535  		for {
   536  			break L
   537  		}
   538  	}
   539  	println() // ok
   540  }
   541  
   542  func _() int {
   543  	print(1)
   544  L:
   545  	select {
   546  	case <-c:
   547  		print(2)
   548  		panic("abc")
   549  	case c <- 1:
   550  		print(2)
   551  		break L
   552  	}
   553  	println() // ok
   554  }
   555  
   556  func _() int {
   557  	print(1)
   558  	select {
   559  	case <-c:
   560  		print(1)
   561  		panic("abc")
   562  	default:
   563  		select {}
   564  		// want "unreachable code"
   565  	}
   566  	println() // ok
   567  }
   568  
   569  func _() int {
   570  	print(1)
   571  	switch x {
   572  	case 1:
   573  		print(2)
   574  		panic(3)
   575  		// want "unreachable code"
   576  	default:
   577  		return 4
   578  		// want "unreachable code"
   579  	}
   580  }
   581  
   582  func _() int {
   583  	print(1)
   584  	switch x {
   585  	case 1:
   586  		print(2)
   587  		panic(3)
   588  	default:
   589  		return 4
   590  	}
   591  	// want "unreachable code"
   592  }
   593  
   594  func _() int {
   595  	print(1)
   596  	switch x {
   597  	default:
   598  		return 4
   599  		// want "unreachable code"
   600  	case 1:
   601  		print(2)
   602  		panic(3)
   603  		// want "unreachable code"
   604  	}
   605  }
   606  
   607  func _() int {
   608  	print(1)
   609  	switch x {
   610  	default:
   611  		return 4
   612  	case 1:
   613  		print(2)
   614  		panic(3)
   615  	}
   616  	// want "unreachable code"
   617  }
   618  
   619  func _() int {
   620  	print(1)
   621  	switch x {
   622  	case 1:
   623  		print(2)
   624  		fallthrough
   625  	default:
   626  		return 4
   627  		// want "unreachable code"
   628  	}
   629  }
   630  
   631  func _() int {
   632  	print(1)
   633  	switch x {
   634  	case 1:
   635  		print(2)
   636  		fallthrough
   637  	default:
   638  		return 4
   639  	}
   640  	// want "unreachable code"
   641  }
   642  
   643  func _() int {
   644  	print(1)
   645  	switch {
   646  	}
   647  	println() // ok
   648  }
   649  
   650  func _() int {
   651  	print(1)
   652  	switch x {
   653  	case 1:
   654  		print(2)
   655  		panic(3)
   656  	case 2:
   657  		return 4
   658  	}
   659  	println() // ok
   660  }
   661  
   662  func _() int {
   663  	print(1)
   664  	switch x {
   665  	case 2:
   666  		return 4
   667  	case 1:
   668  		print(2)
   669  		panic(3)
   670  	}
   671  	println() // ok
   672  }
   673  
   674  func _() int {
   675  	print(1)
   676  	switch x {
   677  	case 1:
   678  		print(2)
   679  		fallthrough
   680  	case 2:
   681  		return 4
   682  	}
   683  	println() // ok
   684  }
   685  
   686  func _() int {
   687  	print(1)
   688  	switch x {
   689  	case 1:
   690  		print(2)
   691  		panic(3)
   692  	}
   693  	println() // ok
   694  }
   695  
   696  func _() int {
   697  	print(1)
   698  L:
   699  	switch x {
   700  	case 1:
   701  		print(2)
   702  		panic(3)
   703  		// want "unreachable code"
   704  	default:
   705  		return 4
   706  	}
   707  	println() // ok
   708  }
   709  
   710  func _() int {
   711  	print(1)
   712  	switch x {
   713  	default:
   714  		return 4
   715  		// want "unreachable code"
   716  	case 1:
   717  		print(2)
   718  		panic(3)
   719  	}
   720  	println() // ok
   721  }
   722  
   723  func _() int {
   724  	print(1)
   725  L:
   726  	switch x {
   727  	case 1:
   728  		print(2)
   729  		for {
   730  			break L
   731  		}
   732  	default:
   733  		return 4
   734  	}
   735  	println() // ok
   736  }
   737  
   738  func _() int {
   739  	print(1)
   740  	switch x.(type) {
   741  	case int:
   742  		print(2)
   743  		panic(3)
   744  		// want "unreachable code"
   745  	default:
   746  		return 4
   747  		// want "unreachable code"
   748  	}
   749  }
   750  
   751  func _() int {
   752  	print(1)
   753  	switch x.(type) {
   754  	case int:
   755  		print(2)
   756  		panic(3)
   757  	default:
   758  		return 4
   759  	}
   760  	// want "unreachable code"
   761  }
   762  
   763  func _() int {
   764  	print(1)
   765  	switch x.(type) {
   766  	default:
   767  		return 4
   768  		// want "unreachable code"
   769  	case int:
   770  		print(2)
   771  		panic(3)
   772  		// want "unreachable code"
   773  	}
   774  }
   775  
   776  func _() int {
   777  	print(1)
   778  	switch x.(type) {
   779  	default:
   780  		return 4
   781  	case int:
   782  		print(2)
   783  		panic(3)
   784  	}
   785  	// want "unreachable code"
   786  }
   787  
   788  func _() int {
   789  	print(1)
   790  	switch x.(type) {
   791  	case int:
   792  		print(2)
   793  		fallthrough
   794  	default:
   795  		return 4
   796  		// want "unreachable code"
   797  	}
   798  }
   799  
   800  func _() int {
   801  	print(1)
   802  	switch x.(type) {
   803  	case int:
   804  		print(2)
   805  		fallthrough
   806  	default:
   807  		return 4
   808  	}
   809  	// want "unreachable code"
   810  }
   811  
   812  func _() int {
   813  	print(1)
   814  	switch {
   815  	}
   816  	println() // ok
   817  }
   818  
   819  func _() int {
   820  	print(1)
   821  	switch x.(type) {
   822  	case int:
   823  		print(2)
   824  		panic(3)
   825  	case float64:
   826  		return 4
   827  	}
   828  	println() // ok
   829  }
   830  
   831  func _() int {
   832  	print(1)
   833  	switch x.(type) {
   834  	case float64:
   835  		return 4
   836  	case int:
   837  		print(2)
   838  		panic(3)
   839  	}
   840  	println() // ok
   841  }
   842  
   843  func _() int {
   844  	print(1)
   845  	switch x.(type) {
   846  	case int:
   847  		print(2)
   848  		fallthrough
   849  	case float64:
   850  		return 4
   851  	}
   852  	println() // ok
   853  }
   854  
   855  func _() int {
   856  	print(1)
   857  	switch x.(type) {
   858  	case int:
   859  		print(2)
   860  		panic(3)
   861  	}
   862  	println() // ok
   863  }
   864  
   865  func _() int {
   866  	print(1)
   867  L:
   868  	switch x.(type) {
   869  	case int:
   870  		print(2)
   871  		panic(3)
   872  		// want "unreachable code"
   873  	default:
   874  		return 4
   875  	}
   876  	println() // ok
   877  }
   878  
   879  func _() int {
   880  	print(1)
   881  	switch x.(type) {
   882  	default:
   883  		return 4
   884  		// want "unreachable code"
   885  	case int:
   886  		print(2)
   887  		panic(3)
   888  	}
   889  	println() // ok
   890  }
   891  
   892  func _() int {
   893  	print(1)
   894  L:
   895  	switch x.(type) {
   896  	case int:
   897  		print(2)
   898  		for {
   899  			break L
   900  		}
   901  	default:
   902  		return 4
   903  	}
   904  	println() // ok
   905  }
   906  
   907  // again, but without the leading print(1).
   908  // testing that everything works when the terminating statement is first.
   909  
   910  func _() int {
   911  	println() // ok
   912  }
   913  
   914  func _() int {
   915  	return 2
   916  	// want "unreachable code"
   917  }
   918  
   919  func _() int {
   920  L:
   921  	goto L
   922  	// want "unreachable code"
   923  }
   924  
   925  func _() int {
   926  	panic(2)
   927  	// want "unreachable code"
   928  }
   929  
   930  // but only builtin panic
   931  func _() int {
   932  	var panic = func(int) {}
   933  	panic(2)
   934  	println() // ok
   935  }
   936  
   937  func _() int {
   938  	{
   939  		return 2
   940  		// want "unreachable code"
   941  	}
   942  }
   943  
   944  func _() int {
   945  	{
   946  		return 2
   947  	}
   948  	// want "unreachable code"
   949  }
   950  
   951  func _() int {
   952  L:
   953  	{
   954  		goto L
   955  		// want "unreachable code"
   956  	}
   957  }
   958  
   959  func _() int {
   960  L:
   961  	{
   962  		goto L
   963  	}
   964  	// want "unreachable code"
   965  }
   966  
   967  func _() int {
   968  	{
   969  		panic(2)
   970  		// want "unreachable code"
   971  	}
   972  }
   973  
   974  func _() int {
   975  	{
   976  		panic(2)
   977  	}
   978  	// want "unreachable code"
   979  }
   980  
   981  func _() int {
   982  	return 2
   983  
   984  	println() // ok
   985  }
   986  
   987  func _() int {
   988  L:
   989  	goto L
   990  
   991  	println() // ok
   992  }
   993  
   994  func _() int {
   995  	panic(2)
   996  
   997  	println() // ok
   998  }
   999  
  1000  func _() int {
  1001  	{
  1002  		return 2
  1003  
  1004  	}
  1005  	println() // ok
  1006  }
  1007  
  1008  func _() int {
  1009  L:
  1010  	{
  1011  		goto L
  1012  
  1013  	}
  1014  	println() // ok
  1015  }
  1016  
  1017  func _() int {
  1018  	{
  1019  		panic(2)
  1020  
  1021  	}
  1022  	println() // ok
  1023  }
  1024  
  1025  func _() int {
  1026  	{
  1027  		return 2
  1028  	}
  1029  
  1030  	println() // ok
  1031  }
  1032  
  1033  func _() int {
  1034  L:
  1035  	{
  1036  		goto L
  1037  	}
  1038  
  1039  	println() // ok
  1040  }
  1041  
  1042  func _() int {
  1043  	{
  1044  		panic(2)
  1045  	}
  1046  
  1047  	println() // ok
  1048  }
  1049  
  1050  // again, with func literals
  1051  
  1052  var _ = func() int {
  1053  }
  1054  
  1055  var _ = func() int {
  1056  	print(1)
  1057  }
  1058  
  1059  var _ = func() int {
  1060  	print(1)
  1061  	return 2
  1062  	// want "unreachable code"
  1063  }
  1064  
  1065  var _ = func() int {
  1066  L:
  1067  	print(1)
  1068  	goto L
  1069  	// want "unreachable code"
  1070  }
  1071  
  1072  var _ = func() int {
  1073  	print(1)
  1074  	panic(2)
  1075  	// want "unreachable code"
  1076  }
  1077  
  1078  // but only builtin panic
  1079  var _ = func() int {
  1080  	var panic = func(int) {}
  1081  	print(1)
  1082  	panic(2)
  1083  	println() // ok
  1084  }
  1085  
  1086  var _ = func() int {
  1087  	{
  1088  		print(1)
  1089  		return 2
  1090  		// want "unreachable code"
  1091  	}
  1092  	println() // ok
  1093  }
  1094  
  1095  var _ = func() int {
  1096  	{
  1097  		print(1)
  1098  		return 2
  1099  	}
  1100  	// want "unreachable code"
  1101  }
  1102  
  1103  var _ = func() int {
  1104  L:
  1105  	{
  1106  		print(1)
  1107  		goto L
  1108  		// want "unreachable code"
  1109  	}
  1110  	println() // ok
  1111  }
  1112  
  1113  var _ = func() int {
  1114  L:
  1115  	{
  1116  		print(1)
  1117  		goto L
  1118  	}
  1119  	// want "unreachable code"
  1120  }
  1121  
  1122  var _ = func() int {
  1123  	print(1)
  1124  	{
  1125  		panic(2)
  1126  	}
  1127  }
  1128  
  1129  var _ = func() int {
  1130  	print(1)
  1131  	{
  1132  		panic(2)
  1133  		// want "unreachable code"
  1134  	}
  1135  }
  1136  
  1137  var _ = func() int {
  1138  	print(1)
  1139  	{
  1140  		panic(2)
  1141  	}
  1142  	// want "unreachable code"
  1143  }
  1144  
  1145  var _ = func() int {
  1146  	print(1)
  1147  	return 2
  1148  
  1149  }
  1150  
  1151  var _ = func() int {
  1152  L:
  1153  	print(1)
  1154  	goto L
  1155  
  1156  }
  1157  
  1158  var _ = func() int {
  1159  	print(1)
  1160  	panic(2)
  1161  
  1162  }
  1163  
  1164  var _ = func() int {
  1165  	{
  1166  		print(1)
  1167  		return 2
  1168  
  1169  	}
  1170  }
  1171  
  1172  var _ = func() int {
  1173  L:
  1174  	{
  1175  		print(1)
  1176  		goto L
  1177  
  1178  	}
  1179  }
  1180  
  1181  var _ = func() int {
  1182  	print(1)
  1183  	{
  1184  		panic(2)
  1185  
  1186  	}
  1187  }
  1188  
  1189  var _ = func() int {
  1190  	{
  1191  		print(1)
  1192  		return 2
  1193  	}
  1194  
  1195  }
  1196  
  1197  var _ = func() int {
  1198  L:
  1199  	{
  1200  		print(1)
  1201  		goto L
  1202  	}
  1203  
  1204  }
  1205  
  1206  var _ = func() int {
  1207  	print(1)
  1208  	{
  1209  		panic(2)
  1210  	}
  1211  
  1212  }
  1213  
  1214  var _ = func() int {
  1215  	print(1)
  1216  	if x == nil {
  1217  		panic(2)
  1218  	} else {
  1219  		panic(3)
  1220  	}
  1221  	// want "unreachable code"
  1222  }
  1223  
  1224  var _ = func() int {
  1225  L:
  1226  	print(1)
  1227  	if x == nil {
  1228  		panic(2)
  1229  	} else {
  1230  		goto L
  1231  	}
  1232  	// want "unreachable code"
  1233  }
  1234  
  1235  var _ = func() int {
  1236  L:
  1237  	print(1)
  1238  	if x == nil {
  1239  		panic(2)
  1240  	} else if x == 1 {
  1241  		return 0
  1242  	} else if x != 2 {
  1243  		panic(3)
  1244  	} else {
  1245  		goto L
  1246  	}
  1247  	// want "unreachable code"
  1248  }
  1249  
  1250  // if-else chain missing final else is not okay, even if the
  1251  // conditions cover every possible case.
  1252  
  1253  var _ = func() int {
  1254  	print(1)
  1255  	if x == nil {
  1256  		panic(2)
  1257  	} else if x != nil {
  1258  		panic(3)
  1259  	}
  1260  	println() // ok
  1261  }
  1262  
  1263  var _ = func() int {
  1264  	print(1)
  1265  	if x == nil {
  1266  		panic(2)
  1267  	}
  1268  	println() // ok
  1269  }
  1270  
  1271  var _ = func() int {
  1272  L:
  1273  	print(1)
  1274  	if x == nil {
  1275  		panic(2)
  1276  	} else if x == 1 {
  1277  		return 0
  1278  	} else if x != 1 {
  1279  		panic(3)
  1280  	}
  1281  	println() // ok
  1282  }
  1283  
  1284  var _ = func() int {
  1285  	print(1)
  1286  	for {
  1287  	}
  1288  	// want "unreachable code"
  1289  }
  1290  
  1291  var _ = func() int {
  1292  	for {
  1293  		for {
  1294  			break
  1295  		}
  1296  	}
  1297  	// want "unreachable code"
  1298  }
  1299  
  1300  var _ = func() int {
  1301  	for {
  1302  		for {
  1303  			break
  1304  			// want "unreachable code"
  1305  		}
  1306  	}
  1307  }
  1308  
  1309  var _ = func() int {
  1310  	for {
  1311  		for {
  1312  			continue
  1313  			// want "unreachable code"
  1314  		}
  1315  	}
  1316  }
  1317  
  1318  var _ = func() int {
  1319  	for {
  1320  	L:
  1321  		for {
  1322  			break L
  1323  		}
  1324  	}
  1325  	// want "unreachable code"
  1326  }
  1327  
  1328  var _ = func() int {
  1329  	print(1)
  1330  	for {
  1331  		break
  1332  	}
  1333  	println() // ok
  1334  }
  1335  
  1336  var _ = func() int {
  1337  	for {
  1338  		for {
  1339  		}
  1340  		// want "unreachable code"
  1341  	}
  1342  	println() // ok
  1343  }
  1344  
  1345  var _ = func() int {
  1346  L:
  1347  	for {
  1348  		for {
  1349  			break L
  1350  		}
  1351  	}
  1352  	println() // ok
  1353  }
  1354  
  1355  var _ = func() int {
  1356  	print(1)
  1357  	for x == nil {
  1358  	}
  1359  	println() // ok
  1360  }
  1361  
  1362  var _ = func() int {
  1363  	for x == nil {
  1364  		for {
  1365  			break
  1366  		}
  1367  	}
  1368  	println() // ok
  1369  }
  1370  
  1371  var _ = func() int {
  1372  	for x == nil {
  1373  	L:
  1374  		for {
  1375  			break L
  1376  		}
  1377  	}
  1378  	println() // ok
  1379  }
  1380  
  1381  var _ = func() int {
  1382  	print(1)
  1383  	for true {
  1384  	}
  1385  	println() // ok
  1386  }
  1387  
  1388  var _ = func() int {
  1389  	for true {
  1390  		for {
  1391  			break
  1392  		}
  1393  	}
  1394  	println() // ok
  1395  }
  1396  
  1397  var _ = func() int {
  1398  	for true {
  1399  	L:
  1400  		for {
  1401  			break L
  1402  		}
  1403  	}
  1404  	println() // ok
  1405  }
  1406  
  1407  var _ = func() int {
  1408  	print(1)
  1409  	select {}
  1410  	// want "unreachable code"
  1411  }
  1412  
  1413  var _ = func() int {
  1414  	print(1)
  1415  	select {
  1416  	case <-c:
  1417  		print(2)
  1418  		panic("abc")
  1419  		// want "unreachable code"
  1420  	}
  1421  }
  1422  
  1423  var _ = func() int {
  1424  	print(1)
  1425  	select {
  1426  	case <-c:
  1427  		print(2)
  1428  		panic("abc")
  1429  	}
  1430  	// want "unreachable code"
  1431  }
  1432  
  1433  var _ = func() int {
  1434  	print(1)
  1435  	select {
  1436  	case <-c:
  1437  		print(2)
  1438  		for {
  1439  		}
  1440  		// want "unreachable code"
  1441  	}
  1442  }
  1443  
  1444  var _ = func() int {
  1445  	print(1)
  1446  	select {
  1447  	case <-c:
  1448  		print(2)
  1449  		for {
  1450  		}
  1451  	}
  1452  	// want "unreachable code"
  1453  }
  1454  
  1455  var _ = func() int {
  1456  L:
  1457  	print(1)
  1458  	select {
  1459  	case <-c:
  1460  		print(2)
  1461  		panic("abc")
  1462  		// want "unreachable code"
  1463  	case c <- 1:
  1464  		print(2)
  1465  		goto L
  1466  		// want "unreachable code"
  1467  	}
  1468  }
  1469  
  1470  var _ = func() int {
  1471  L:
  1472  	print(1)
  1473  	select {
  1474  	case <-c:
  1475  		print(2)
  1476  		panic("abc")
  1477  	case c <- 1:
  1478  		print(2)
  1479  		goto L
  1480  	}
  1481  	// want "unreachable code"
  1482  }
  1483  
  1484  var _ = func() int {
  1485  	print(1)
  1486  	select {
  1487  	case <-c:
  1488  		print(2)
  1489  		panic("abc")
  1490  		// want "unreachable code"
  1491  	default:
  1492  		select {}
  1493  		// want "unreachable code"
  1494  	}
  1495  }
  1496  
  1497  var _ = func() int {
  1498  	print(1)
  1499  	select {
  1500  	case <-c:
  1501  		print(2)
  1502  		panic("abc")
  1503  	default:
  1504  		select {}
  1505  	}
  1506  	// want "unreachable code"
  1507  }
  1508  
  1509  var _ = func() int {
  1510  	print(1)
  1511  	select {
  1512  	case <-c:
  1513  		print(2)
  1514  	}
  1515  	println() // ok
  1516  }
  1517  
  1518  var _ = func() int {
  1519  L:
  1520  	print(1)
  1521  	select {
  1522  	case <-c:
  1523  		print(2)
  1524  		panic("abc")
  1525  		// want "unreachable code"
  1526  	case c <- 1:
  1527  		print(2)
  1528  	}
  1529  	println() // ok
  1530  }
  1531  
  1532  var _ = func() int {
  1533  	print(1)
  1534  	select {
  1535  	case <-c:
  1536  		print(2)
  1537  		panic("abc")
  1538  	default:
  1539  		print(2)
  1540  	}
  1541  	println() // ok
  1542  }
  1543  
  1544  var _ = func() int {
  1545  	print(1)
  1546  	select {
  1547  	default:
  1548  		break
  1549  	}
  1550  	println() // ok
  1551  }
  1552  
  1553  var _ = func() int {
  1554  	print(1)
  1555  	select {
  1556  	case <-c:
  1557  		print(2)
  1558  		panic("abc")
  1559  		// want "unreachable code"
  1560  	}
  1561  	println() // ok
  1562  }
  1563  
  1564  var _ = func() int {
  1565  	print(1)
  1566  L:
  1567  	select {
  1568  	case <-c:
  1569  		print(2)
  1570  		for {
  1571  			break L
  1572  		}
  1573  	}
  1574  	println() // ok
  1575  }
  1576  
  1577  var _ = func() int {
  1578  	print(1)
  1579  L:
  1580  	select {
  1581  	case <-c:
  1582  		print(2)
  1583  		panic("abc")
  1584  	case c <- 1:
  1585  		print(2)
  1586  		break L
  1587  	}
  1588  	println() // ok
  1589  }
  1590  
  1591  var _ = func() int {
  1592  	print(1)
  1593  	select {
  1594  	case <-c:
  1595  		print(1)
  1596  		panic("abc")
  1597  	default:
  1598  		select {}
  1599  		// want "unreachable code"
  1600  	}
  1601  	println() // ok
  1602  }
  1603  
  1604  var _ = func() int {
  1605  	print(1)
  1606  	switch x {
  1607  	case 1:
  1608  		print(2)
  1609  		panic(3)
  1610  		// want "unreachable code"
  1611  	default:
  1612  		return 4
  1613  		// want "unreachable code"
  1614  	}
  1615  }
  1616  
  1617  var _ = func() int {
  1618  	print(1)
  1619  	switch x {
  1620  	case 1:
  1621  		print(2)
  1622  		panic(3)
  1623  	default:
  1624  		return 4
  1625  	}
  1626  	// want "unreachable code"
  1627  }
  1628  
  1629  var _ = func() int {
  1630  	print(1)
  1631  	switch x {
  1632  	default:
  1633  		return 4
  1634  		// want "unreachable code"
  1635  	case 1:
  1636  		print(2)
  1637  		panic(3)
  1638  		// want "unreachable code"
  1639  	}
  1640  }
  1641  
  1642  var _ = func() int {
  1643  	print(1)
  1644  	switch x {
  1645  	default:
  1646  		return 4
  1647  	case 1:
  1648  		print(2)
  1649  		panic(3)
  1650  	}
  1651  	// want "unreachable code"
  1652  }
  1653  
  1654  var _ = func() int {
  1655  	print(1)
  1656  	switch x {
  1657  	case 1:
  1658  		print(2)
  1659  		fallthrough
  1660  	default:
  1661  		return 4
  1662  		// want "unreachable code"
  1663  	}
  1664  }
  1665  
  1666  var _ = func() int {
  1667  	print(1)
  1668  	switch x {
  1669  	case 1:
  1670  		print(2)
  1671  		fallthrough
  1672  	default:
  1673  		return 4
  1674  	}
  1675  	// want "unreachable code"
  1676  }
  1677  
  1678  var _ = func() int {
  1679  	print(1)
  1680  	switch {
  1681  	}
  1682  	println() // ok
  1683  }
  1684  
  1685  var _ = func() int {
  1686  	print(1)
  1687  	switch x {
  1688  	case 1:
  1689  		print(2)
  1690  		panic(3)
  1691  	case 2:
  1692  		return 4
  1693  	}
  1694  	println() // ok
  1695  }
  1696  
  1697  var _ = func() int {
  1698  	print(1)
  1699  	switch x {
  1700  	case 2:
  1701  		return 4
  1702  	case 1:
  1703  		print(2)
  1704  		panic(3)
  1705  	}
  1706  	println() // ok
  1707  }
  1708  
  1709  var _ = func() int {
  1710  	print(1)
  1711  	switch x {
  1712  	case 1:
  1713  		print(2)
  1714  		fallthrough
  1715  	case 2:
  1716  		return 4
  1717  	}
  1718  	println() // ok
  1719  }
  1720  
  1721  var _ = func() int {
  1722  	print(1)
  1723  	switch x {
  1724  	case 1:
  1725  		print(2)
  1726  		panic(3)
  1727  	}
  1728  	println() // ok
  1729  }
  1730  
  1731  var _ = func() int {
  1732  	print(1)
  1733  L:
  1734  	switch x {
  1735  	case 1:
  1736  		print(2)
  1737  		panic(3)
  1738  		// want "unreachable code"
  1739  	default:
  1740  		return 4
  1741  	}
  1742  	println() // ok
  1743  }
  1744  
  1745  var _ = func() int {
  1746  	print(1)
  1747  	switch x {
  1748  	default:
  1749  		return 4
  1750  		// want "unreachable code"
  1751  	case 1:
  1752  		print(2)
  1753  		panic(3)
  1754  	}
  1755  	println() // ok
  1756  }
  1757  
  1758  var _ = func() int {
  1759  	print(1)
  1760  L:
  1761  	switch x {
  1762  	case 1:
  1763  		print(2)
  1764  		for {
  1765  			break L
  1766  		}
  1767  	default:
  1768  		return 4
  1769  	}
  1770  	println() // ok
  1771  }
  1772  
  1773  var _ = func() int {
  1774  	print(1)
  1775  	switch x.(type) {
  1776  	case int:
  1777  		print(2)
  1778  		panic(3)
  1779  		// want "unreachable code"
  1780  	default:
  1781  		return 4
  1782  		// want "unreachable code"
  1783  	}
  1784  }
  1785  
  1786  var _ = func() int {
  1787  	print(1)
  1788  	switch x.(type) {
  1789  	case int:
  1790  		print(2)
  1791  		panic(3)
  1792  	default:
  1793  		return 4
  1794  	}
  1795  	// want "unreachable code"
  1796  }
  1797  
  1798  var _ = func() int {
  1799  	print(1)
  1800  	switch x.(type) {
  1801  	default:
  1802  		return 4
  1803  		// want "unreachable code"
  1804  	case int:
  1805  		print(2)
  1806  		panic(3)
  1807  		// want "unreachable code"
  1808  	}
  1809  }
  1810  
  1811  var _ = func() int {
  1812  	print(1)
  1813  	switch x.(type) {
  1814  	default:
  1815  		return 4
  1816  	case int:
  1817  		print(2)
  1818  		panic(3)
  1819  	}
  1820  	// want "unreachable code"
  1821  }
  1822  
  1823  var _ = func() int {
  1824  	print(1)
  1825  	switch x.(type) {
  1826  	case int:
  1827  		print(2)
  1828  		fallthrough
  1829  	default:
  1830  		return 4
  1831  		// want "unreachable code"
  1832  	}
  1833  }
  1834  
  1835  var _ = func() int {
  1836  	print(1)
  1837  	switch x.(type) {
  1838  	case int:
  1839  		print(2)
  1840  		fallthrough
  1841  	default:
  1842  		return 4
  1843  	}
  1844  	// want "unreachable code"
  1845  }
  1846  
  1847  var _ = func() int {
  1848  	print(1)
  1849  	switch {
  1850  	}
  1851  	println() // ok
  1852  }
  1853  
  1854  var _ = func() int {
  1855  	print(1)
  1856  	switch x.(type) {
  1857  	case int:
  1858  		print(2)
  1859  		panic(3)
  1860  	case float64:
  1861  		return 4
  1862  	}
  1863  	println() // ok
  1864  }
  1865  
  1866  var _ = func() int {
  1867  	print(1)
  1868  	switch x.(type) {
  1869  	case float64:
  1870  		return 4
  1871  	case int:
  1872  		print(2)
  1873  		panic(3)
  1874  	}
  1875  	println() // ok
  1876  }
  1877  
  1878  var _ = func() int {
  1879  	print(1)
  1880  	switch x.(type) {
  1881  	case int:
  1882  		print(2)
  1883  		fallthrough
  1884  	case float64:
  1885  		return 4
  1886  	}
  1887  	println() // ok
  1888  }
  1889  
  1890  var _ = func() int {
  1891  	print(1)
  1892  	switch x.(type) {
  1893  	case int:
  1894  		print(2)
  1895  		panic(3)
  1896  	}
  1897  	println() // ok
  1898  }
  1899  
  1900  var _ = func() int {
  1901  	print(1)
  1902  L:
  1903  	switch x.(type) {
  1904  	case int:
  1905  		print(2)
  1906  		panic(3)
  1907  		// want "unreachable code"
  1908  	default:
  1909  		return 4
  1910  	}
  1911  	println() // ok
  1912  }
  1913  
  1914  var _ = func() int {
  1915  	print(1)
  1916  	switch x.(type) {
  1917  	default:
  1918  		return 4
  1919  		// want "unreachable code"
  1920  	case int:
  1921  		print(2)
  1922  		panic(3)
  1923  	}
  1924  	println() // ok
  1925  }
  1926  
  1927  var _ = func() int {
  1928  	print(1)
  1929  L:
  1930  	switch x.(type) {
  1931  	case int:
  1932  		print(2)
  1933  		for {
  1934  			break L
  1935  		}
  1936  	default:
  1937  		return 4
  1938  	}
  1939  	println() // ok
  1940  }
  1941  
  1942  // again, but without the leading print(1).
  1943  // testing that everything works when the terminating statement is first.
  1944  
  1945  var _ = func() int {
  1946  	println() // ok
  1947  }
  1948  
  1949  var _ = func() int {
  1950  	return 2
  1951  	// want "unreachable code"
  1952  }
  1953  
  1954  var _ = func() int {
  1955  L:
  1956  	goto L
  1957  	// want "unreachable code"
  1958  }
  1959  
  1960  var _ = func() int {
  1961  	panic(2)
  1962  	// want "unreachable code"
  1963  }
  1964  
  1965  // but only builtin panic
  1966  var _ = func() int {
  1967  	var panic = func(int) {}
  1968  	panic(2)
  1969  	println() // ok
  1970  }
  1971  
  1972  var _ = func() int {
  1973  	{
  1974  		return 2
  1975  		// want "unreachable code"
  1976  	}
  1977  }
  1978  
  1979  var _ = func() int {
  1980  	{
  1981  		return 2
  1982  	}
  1983  	// want "unreachable code"
  1984  }
  1985  
  1986  var _ = func() int {
  1987  L:
  1988  	{
  1989  		goto L
  1990  		// want "unreachable code"
  1991  	}
  1992  }
  1993  
  1994  var _ = func() int {
  1995  L:
  1996  	{
  1997  		goto L
  1998  	}
  1999  	// want "unreachable code"
  2000  }
  2001  
  2002  var _ = func() int {
  2003  	{
  2004  		panic(2)
  2005  		// want "unreachable code"
  2006  	}
  2007  }
  2008  
  2009  var _ = func() int {
  2010  	{
  2011  		panic(2)
  2012  	}
  2013  	// want "unreachable code"
  2014  }
  2015  
  2016  var _ = func() int {
  2017  	return 2
  2018  
  2019  	println() // ok
  2020  }
  2021  
  2022  var _ = func() int {
  2023  L:
  2024  	goto L
  2025  
  2026  	println() // ok
  2027  }
  2028  
  2029  var _ = func() int {
  2030  	panic(2)
  2031  
  2032  	println() // ok
  2033  }
  2034  
  2035  var _ = func() int {
  2036  	{
  2037  		return 2
  2038  
  2039  	}
  2040  	println() // ok
  2041  }
  2042  
  2043  var _ = func() int {
  2044  L:
  2045  	{
  2046  		goto L
  2047  
  2048  	}
  2049  	println() // ok
  2050  }
  2051  
  2052  var _ = func() int {
  2053  	{
  2054  		panic(2)
  2055  
  2056  	}
  2057  	println() // ok
  2058  }
  2059  
  2060  var _ = func() int {
  2061  	{
  2062  		return 2
  2063  	}
  2064  
  2065  	println() // ok
  2066  }
  2067  
  2068  var _ = func() int {
  2069  L:
  2070  	{
  2071  		goto L
  2072  	}
  2073  
  2074  	println() // ok
  2075  }
  2076  
  2077  var _ = func() int {
  2078  	{
  2079  		panic(2)
  2080  	}
  2081  
  2082  	println() // ok
  2083  }
  2084  
  2085  var _ = func() {
  2086  	// goto without label used to panic
  2087  	goto
  2088  }
  2089  
  2090  func _() int {
  2091  	// Empty switch tag with non-bool case value used to panic.
  2092  	switch {
  2093  	case 1:
  2094  		println()
  2095  	}
  2096  	println()
  2097  }