]> Cypherpunks repositories - gostls13.git/commitdiff
cmd/gc: mark broken type declarations as broken.
authorDaniel Morsing <daniel.morsing@gmail.com>
Fri, 31 Aug 2012 17:02:29 +0000 (13:02 -0400)
committerRuss Cox <rsc@golang.org>
Fri, 31 Aug 2012 17:02:29 +0000 (13:02 -0400)
This fixes a spurious 'invalid recursive type' error, and stops the compiler from emitting errors on uses of the invalid type.

Fixes #3766.

R=golang-dev, dave, minux.ma, rsc
CC=golang-dev
https://golang.org/cl/6443100

src/cmd/gc/typecheck.c
test/fixedbugs/bug451.go

index 0335fe0c3264da951f5c059ab03790b9e15149d4..f21f07faaa6b8e59aaa5b31dcd48720e5b9e0c18 100644 (file)
@@ -2715,6 +2715,7 @@ typecheckdeftype(Node *n)
        typecheck(&n->ntype, Etype);
        if((t = n->ntype->type) == T) {
                n->diag = 1;
+               n->type = T;
                goto ret;
        }
        if(n->type == T) {
index d2e4a0b44a6cc7b14224399c5bc6fe6d53dbbc38..82182af9b9049a20871df1f31aa1f2ae9d90ba86 100644 (file)
@@ -1,38 +1,11 @@
-// run
+// errorcheck
 
-// Copyright 2012 The Go Authors.  All rights reserved.
+// 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.
 
-// Issue 3835: 8g tries to optimize arithmetic involving integer
-// constants, but can run out of registers in the process.
-
 package main
 
-var a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y, z, A, B, C, D, E, F, G int
-
-func foo() int {
-       return a + 1 + b + 2 + c + 3 + d + 4 + e + 5 + f + 6 + g + 7 + h + 8 + i + 9 + j + 10 +
-               k + 1 + l + 2 + m + 3 + n + 4 + o + 5 + p + 6 + q + 7 + r + 8 + s + 9 + t + 10 +
-               u + 1 + v + 2 + w + 3 + x + 4 + y + 5 + z + 6 + A + 7 + B + 8 + C + 9 + D + 10 +
-               E + 1 + F + 2 + G + 3
-}
-
-func bar() int8 {
-       var (
-               W int16
-               X int32
-               Y int32
-               Z int32
-       )
-       return int8(W+int16(X+3)+3) * int8(Y+3+Z*3)
-}
+type T x.T // ERROR "undefined"
 
-func main() {
-       if foo() == 0 {
-               panic("foo")
-       }
-       if bar() == 0 {
-               panic("bar")
-       }
-}
+// bogus "invalid recursive type"