...
Run Format

Source file test/fixedbugs/issue16130.go

Documentation: test/fixedbugs

  // run
  
  // Copyright 2016 The Go Authors. All rights reserved.
  // Use of this source code is governed by a BSD-style
  // license that can be found in the LICENSE file.
  
  // Test that an interface conversion error panics with an "interface
  // conversion" run-time error. It was (incorrectly) panicking with a
  // "nil pointer dereference."
  
  package main
  
  import (
  	"fmt"
  	"runtime"
  	"strings"
  )
  
  type I interface {
  	Get() int
  }
  
  func main() {
  	defer func() {
  		r := recover()
  		if r == nil {
  			panic("expected panic")
  		}
  		re, ok := r.(runtime.Error)
  		if !ok {
  			panic(fmt.Sprintf("got %T, expected runtime.Error", r))
  		}
  		if !strings.Contains(re.Error(), "interface conversion") {
  			panic(fmt.Sprintf("got %q, expected interface conversion error", re.Error()))
  		}
  	}()
  	e := (interface{})(0)
  	if _, ok := e.(I); ok {
  		panic("unexpected interface conversion success")
  	}
  	fmt.Println(e.(I))
  	panic("unexpected interface conversion success")
  }
  

View as plain text