go issue6977 源码

  • 2022-07-15
  • 浏览 (514)

golang issue6977 代码

文件路径:/src/cmd/compile/internal/types2/testdata/fixedbugs/issue6977.go

// Copyright 2019 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 p

import "io"

// Alan's initial report.

type I interface { f(); String() string }
type J interface { g(); String() string }

type IJ1 = interface { I; J }
type IJ2 = interface { f(); g(); String() string }

var _ = (*IJ1)(nil) == (*IJ2)(nil) // static assert that IJ1 and IJ2 are identical types

// The canonical example.

type ReadWriteCloser interface { io.ReadCloser; io.WriteCloser }

// Some more cases.

type M interface { m() }
type M32 interface { m() int32 }
type M64 interface { m() int64 }

type U1 interface { m() }
type U2 interface { m(); M }
type U3 interface { M; m() }
type U4 interface { M; M; M }
type U5 interface { U1; U2; U3; U4 }

type U6 interface { m(); m /* ERROR duplicate method */ () }
type U7 interface { M32 /* ERROR duplicate method */ ; m() }
type U8 interface { m(); M32 /* ERROR duplicate method */ }
type U9 interface { M32; M64 /* ERROR duplicate method */ }

// Verify that repeated embedding of the same interface(s)
// eliminates duplicate methods early (rather than at the
// end) to prevent exponential memory and time use.
// Without early elimination, computing T29 may take dozens
// of minutes.
type (
        T0 interface { m() }
        T1 interface { T0; T0 }
        T2 interface { T1; T1 }
        T3 interface { T2; T2 }
        T4 interface { T3; T3 }
        T5 interface { T4; T4 }
        T6 interface { T5; T5 }
        T7 interface { T6; T6 }
        T8 interface { T7; T7 }
        T9 interface { T8; T8 }

        T10 interface { T9; T9 }
        T11 interface { T10; T10 }
        T12 interface { T11; T11 }
        T13 interface { T12; T12 }
        T14 interface { T13; T13 }
        T15 interface { T14; T14 }
        T16 interface { T15; T15 }
        T17 interface { T16; T16 }
        T18 interface { T17; T17 }
        T19 interface { T18; T18 }

        T20 interface { T19; T19 }
        T21 interface { T20; T20 }
        T22 interface { T21; T21 }
        T23 interface { T22; T22 }
        T24 interface { T23; T23 }
        T25 interface { T24; T24 }
        T26 interface { T25; T25 }
        T27 interface { T26; T26 }
        T28 interface { T27; T27 }
        T29 interface { T28; T28 }
)

// Verify that m is present.
var x T29
var _ = x.m

相关信息

go 源码目录

相关文章

go issue20583 源码

go issue23203a 源码

go issue23203b 源码

go issue25838 源码

go issue26390 源码

go issue28251 源码

go issue39634 源码

go issue39664 源码

go issue39680 源码

go issue39693 源码