]> Cypherpunks repositories - gostls13.git/commitdiff
gc: use inferred type rather than original one when reporting non-assignability.
authorLuuk van Dijk <lvd@golang.org>
Wed, 14 Dec 2011 16:34:35 +0000 (17:34 +0100)
committerLuuk van Dijk <lvd@golang.org>
Wed, 14 Dec 2011 16:34:35 +0000 (17:34 +0100)
Fixes #2451

R=rsc, bradfitz
CC=golang-dev
https://golang.org/cl/5372105

src/cmd/gc/fmt.c
test/ddd1.go
test/fixedbugs/bug386.go [new file with mode: 0644]
test/named1.go

index 23b1808291ca89510e116fa601cec1e321eba8db..d2e3423f17b425137385b7e7ce6048070fa742f7 100644 (file)
@@ -1278,13 +1278,17 @@ exprfmt(Fmt *f, Node *n, int prec)
 static int
 nodefmt(Fmt *f, Node *n)
 {
+       Type *t;
+
+       t = n->type;
+       if(n->orig != N)
+               n = n->orig;
 
-       if(f->flags&FmtLong && n->type != T) {
-               if(n->type->etype == TNIL)
+       if(f->flags&FmtLong && t != T) {
+               if(t->etype == TNIL)
                        return fmtprint(f, "nil");
                else
-                       return fmtprint(f, "%N (type %T)", n, n->type);
-
+                       return fmtprint(f, "%N (type %T)", n, t);
        }
 
        // TODO inlining produces expressions with ninits. we can't print these yet.
@@ -1479,8 +1483,6 @@ Nconv(Fmt *fp)
        switch(fmtmode) {
        case FErr:
        case FExp:
-               if(n->orig != N)
-                       n = n->orig;
                r = nodefmt(fp, n);
                break;
        case FDbg:
index 54ccc234071ded9e74753f2c5ae5c7cb4a36565f..6d84248e5e800e9b322e046a24007a87cb6cc8f9 100644 (file)
@@ -15,7 +15,7 @@ var (
        _ = sum()
        _ = sum(1.0, 2.0)
        _ = sum(1.5)      // ERROR "integer"
-       _ = sum("hello")  // ERROR ".hello. .type ideal string. as type int|incompatible"
+       _ = sum("hello")  // ERROR ".hello. .type string. as type int|incompatible"
        _ = sum([]int{1}) // ERROR "\[\]int literal.*as type int|incompatible"
 )
 
diff --git a/test/fixedbugs/bug386.go b/test/fixedbugs/bug386.go
new file mode 100644 (file)
index 0000000..85b8d30
--- /dev/null
@@ -0,0 +1,12 @@
+// errchk $G $D/$F.go
+
+// 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.
+
+// Issue 2451, 2452 
+package foo
+
+func f() error { return 0 } // ERROR "cannot use 0 .type int."
+
+func g() error { return -1 }  // ERROR "cannot use -1 .type int."
\ No newline at end of file
index 64e492886e7772061c9e99b9d4ac40e6927a6ffa..499b77b9615e5fe92bed7bcd8509fb8a252df9fb 100644 (file)
@@ -37,7 +37,7 @@ func main() {
        asBool(true)
        asBool(*&b)
        asBool(Bool(true))
-       asBool(1 != 2) // ERROR "cannot use.*type ideal bool.*as type Bool"
+       asBool(1 != 2) // ERROR "cannot use.*type bool.*as type Bool"
        asBool(i < j)  // ERROR "cannot use.*type bool.*as type Bool"
 
        _, b = m[2] // ERROR "cannot .* bool.*type Bool"