// 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 */