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