URL
https://opencores.org/ocsvn/openrisc/openrisc/trunk
Subversion Repositories openrisc
[/] [openrisc/] [trunk/] [gnu-dev/] [or1k-gcc/] [gcc/] [testsuite/] [go.test/] [test/] [fixedbugs/] [bug324.dir/] [main.go] - Rev 700
Compare with Previous | Blame | View Log
// Copyright 2011 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 mainimport ("./p")type Exported interface {private()}type Implementation struct{}func (p *Implementation) private() {}func main() {// nothing unusual herevar x Exportedx = new(Implementation)x.private() // main.Implementation.private()// same here - should be and is legalvar px p.Exportedpx = p.X// this assignment is correctly illegal:// px.private undefined (cannot refer to unexported field or method private)// px.private()// this assignment is correctly illegal:// *Implementation does not implement p.Exported (missing p.private method)// px = new(Implementation)// this assignment is correctly illegal:// p.Exported does not implement Exported (missing private method)// x = px// this assignment unexpectedly compiles and then executesdefer func() {recover()}()x = px.(Exported)println("should not get this far")// this is a legitimate call, but because of the previous assignment,// it invokes the method private in p!x.private() // p.Implementation.private()}
