Файловый менеджер - Редактировать - /usr/local/go/test/fixedbugs/issue24693.dir/b.go
Ðазад
// Copyright 2018 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 b import "./a" type T struct{ a.T } func (T) m() { println("ok") } // The compiler used to not pay attention to package for non-exported // methods when statically constructing itabs. The consequence of this // was that the call to b.F1(b.T{}) in c.go would create an itab using // a.T.m instead of b.T.m. func F1(i interface{ m() }) { i.m() } // The interface method calling convention depends on interface method // sets being sorted in the same order across compilation units. In // the test case below, at the call to b.F2(b.T{}) in c.go, the // interface method set is sorted as { a.m(); b.m() }. // // However, while compiling package b, its package path is set to "", // so the code produced for F2 uses { b.m(); a.m() } as the method set // order. So again, it ends up calling the wrong method. // // Also, this function is marked noinline because it's critical to the // test that the interface method call happen in this compilation // unit, and the itab construction happens in c.go. // //go:noinline func F2(i interface { m() a.I // embeds m() from package a }) { i.m() }
| ver. 1.1 | |
.
| PHP 8.4.18 | Ð“ÐµÐ½ÐµÑ€Ð°Ñ†Ð¸Ñ Ñтраницы: 0 |
proxy
|
phpinfo
|
ÐаÑтройка