// 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); } }