|  | // run | 
|  |  | 
|  | // Copyright 2009 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. | 
|  |  | 
|  | package main | 
|  |  | 
|  | type S struct { | 
|  | } | 
|  |  | 
|  | func (p *S) M() { | 
|  | } | 
|  |  | 
|  | type I interface { | 
|  | M(); | 
|  | } | 
|  |  | 
|  | func main() { | 
|  | var p *S = nil; | 
|  | var i I = p;  // this should be possible even though p is nil: we still know the type | 
|  | i.M();  // should be possible since we know the type, and don't ever use the receiver | 
|  | } | 
|  |  | 
|  |  | 
|  | /* | 
|  | throw: ifaces2i: nil pointer | 
|  | SIGSEGV: segmentation violation | 
|  | Faulting address: 0x0 | 
|  | pc: 0x1b7d | 
|  |  | 
|  | 0x1b7d?zi | 
|  | throw(30409, 0, 0, ...) | 
|  | throw(0x76c9, 0x0, 0x0, ...) | 
|  | 0x207f?zi | 
|  | sys·ifaces2i(31440, 0, 31480, ...) | 
|  | sys·ifaces2i(0x7ad0, 0x7af8, 0x0, ...) | 
|  | 0x136f?zi | 
|  | main·main(1, 0, 1606416424, ...) | 
|  | main·main(0x1, 0x7fff5fbff828, 0x0, ...) | 
|  |  | 
|  | rax     0x1 | 
|  | rbx     0x1 | 
|  | rcx     0x33b5 | 
|  | rdx     0x0 | 
|  | rdi     0x1 | 
|  | rsi     0x7684 | 
|  | rbp     0x7684 | 
|  | rsp     0xafb8 | 
|  | r8      0x0 | 
|  | r9      0x0 | 
|  | r10     0x1002 | 
|  | r11     0x206 | 
|  | r12     0x0 | 
|  | r13     0x0 | 
|  | r14     0x7c48 | 
|  | r15     0xa000 | 
|  | rip     0x1b7d | 
|  | rflags  0x10202 | 
|  | cs      0x27 | 
|  | fs      0x10 | 
|  | gs      0x48 | 
|  | */ |