github.com/xushiwei/go@v0.0.0-20130601165731-2b9d83f45bc9/src/cmd/vet/test_deadcode.go (about)

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