mirror of
https://github.com/golang/go
synced 2024-11-23 21:00:06 -07:00
394ac818b0
The new export format keeps track of all types that are exported. If a type is seen that was exported before, only a reference to that type is emitted. The importer maintains a list of all the seen types and uses that list to resolve type references. The existing compiler infrastructure's invariants assumes that only named types are referred to before they are fully set up. Referring to unnamed incomplete types causes problems. One of the issues was #15548. Added a new internal flag 'trackAllTypes' to enable/disable this type tracking. With this change only named types are tracked. Verified that this fix also addresses #15548, even w/o the prior fix for that issue (in fact that prior fix is turned off if trackAllTypes is disabled because it's not needed). The test for #15548 covers also this change. For #15548. Change-Id: Id0b3ff983629703d025a442823f99649fd728a56 Reviewed-on: https://go-review.googlesource.com/22839 TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by: Matthew Dempsky <mdempsky@google.com>
27 lines
493 B
Go
27 lines
493 B
Go
// compile
|
|
|
|
// Copyright 2012 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 crash compiler in interface type equality check.
|
|
|
|
package p
|
|
|
|
type i1 interface {
|
|
F() interface{i1}
|
|
}
|
|
|
|
type i2 interface {
|
|
F() interface{i2}
|
|
}
|
|
|
|
var v1 i1
|
|
var v2 i2
|
|
|
|
func f() bool {
|
|
return v1 == v2
|
|
}
|
|
|
|
// TODO(gri) Change test to use exported interfaces.
|
|
// See issue #15596 for details.
|