Rémy Oudompheng | 2ece2f5 | 2012-02-18 22:15:42 +0100 | [diff] [blame] | 1 | // run |
Robert Griesemer | e35139a | 2008-09-10 14:21:42 -0700 | [diff] [blame] | 2 | |
| 3 | // Copyright 2009 The Go Authors. All rights reserved. |
| 4 | // Use of this source code is governed by a BSD-style |
| 5 | // license that can be found in the LICENSE file. |
| 6 | |
| 7 | package main |
| 8 | |
Russ Cox | 839a684 | 2009-01-20 14:40:40 -0800 | [diff] [blame] | 9 | type S struct { |
Robert Griesemer | e35139a | 2008-09-10 14:21:42 -0700 | [diff] [blame] | 10 | } |
| 11 | |
| 12 | func (p *S) M() { |
Robert Griesemer | e35139a | 2008-09-10 14:21:42 -0700 | [diff] [blame] | 13 | } |
| 14 | |
Russ Cox | 839a684 | 2009-01-20 14:40:40 -0800 | [diff] [blame] | 15 | type I interface { |
Robert Griesemer | e35139a | 2008-09-10 14:21:42 -0700 | [diff] [blame] | 16 | M(); |
| 17 | } |
| 18 | |
| 19 | func main() { |
| 20 | var p *S = nil; |
| 21 | var i I = p; // this should be possible even though p is nil: we still know the type |
| 22 | i.M(); // should be possible since we know the type, and don't ever use the receiver |
| 23 | } |
| 24 | |
| 25 | |
| 26 | /* |
| 27 | throw: ifaces2i: nil pointer |
| 28 | SIGSEGV: segmentation violation |
| 29 | Faulting address: 0x0 |
| 30 | pc: 0x1b7d |
| 31 | |
| 32 | 0x1b7d?zi |
| 33 | throw(30409, 0, 0, ...) |
| 34 | throw(0x76c9, 0x0, 0x0, ...) |
| 35 | 0x207f?zi |
| 36 | sys·ifaces2i(31440, 0, 31480, ...) |
| 37 | sys·ifaces2i(0x7ad0, 0x7af8, 0x0, ...) |
| 38 | 0x136f?zi |
| 39 | main·main(1, 0, 1606416424, ...) |
| 40 | main·main(0x1, 0x7fff5fbff828, 0x0, ...) |
| 41 | |
| 42 | rax 0x1 |
| 43 | rbx 0x1 |
| 44 | rcx 0x33b5 |
| 45 | rdx 0x0 |
| 46 | rdi 0x1 |
| 47 | rsi 0x7684 |
| 48 | rbp 0x7684 |
| 49 | rsp 0xafb8 |
| 50 | r8 0x0 |
| 51 | r9 0x0 |
| 52 | r10 0x1002 |
| 53 | r11 0x206 |
| 54 | r12 0x0 |
| 55 | r13 0x0 |
| 56 | r14 0x7c48 |
| 57 | r15 0xa000 |
| 58 | rip 0x1b7d |
| 59 | rflags 0x10202 |
| 60 | cs 0x27 |
| 61 | fs 0x10 |
| 62 | gs 0x48 |
| 63 | */ |