| // compile | |
| // Copyright 2021 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. | |
| // This test case caused a panic in the compiler's DWARF gen code. | |
| // Note to future maintainers of this code: | |
| // | |
| // ** Do NOT run gofmt when editing this file ** | |
| // | |
| // In order for the buggy behavior to be triggered in the compiler, | |
| // we need to have a the function of interest all on one gigantic line. | |
| package a | |
| type O interface{} | |
| type IO int | |
| type OS int | |
| type A struct { | |
| x int | |
| } | |
| // original versions of the two function | |
| func (p *A) UO(o O) { | |
| p.r(o, o) | |
| } | |
| func (p *A) r(o1, o2 O) { | |
| switch x := o1.(type) { | |
| case *IO: | |
| p.x = int(*x) | |
| case *OS: | |
| p.x = int(*x + 2) | |
| } | |
| } | |
| // see note above about the importance of all this code winding up on one line. | |
| var myverylongname0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789 int ; func (p *A) UO2(o O) { p.r2(o, o); }; func (p *A) r2(o1, o2 O) { switch x := o1.(type) { case *IO: p.x = int(*x); case *OS: p.x = int(*x + 2); } } |