1
0
mirror of https://github.com/golang/go synced 2024-11-21 18:14:42 -07:00

gc: fix method offsets of anonymous interfaces

Fixes #1290.

R=rsc
CC=golang-dev
https://golang.org/cl/3259043
This commit is contained in:
Eoghan Sherry 2010-12-07 12:56:26 -05:00 committed by Russ Cox
parent cd319092e0
commit 6aa85d1cbe
4 changed files with 33 additions and 2 deletions

View File

@ -844,6 +844,8 @@ dostruct(NodeList *l, int et)
t->broke = 1;
return t;
}
if(et == TINTER)
t = sortinter(t);
if(!funarg)
checkwidth(t);
return t;

View File

@ -1726,7 +1726,6 @@ hidden_type_misc:
| LINTERFACE '{' ohidden_interfacedcl_list '}'
{
$$ = dostruct($3, TINTER);
$$ = sortinter($$);
}
| '*' hidden_type
{

View File

@ -263,7 +263,6 @@ reswitch:
n->type = dostruct(n->list, TINTER);
if(n->type == T)
goto error;
n->type = sortinter(n->type);
break;
case OTFUNC:

31
test/fixedbugs/bug314.go Normal file
View File

@ -0,0 +1,31 @@
// $G $D/$F.go && $L $F.$A && ./$A.out || echo BUG: bug314
// Copyright 2010 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.
// Used to call wrong methods; issue 1290.
package main
type S struct {
}
func (S) a() int{
return 0
}
func (S) b() int{
return 1
}
func main() {
var i interface {
b() int
a() int
} = S{}
if i.a() != 0 {
panic("wrong method called")
}
if i.b() != 1 {
panic("wrong method called")
}
}