cmd/gc: fix 'internal error: typename ideal bool'

Fixes #6298.

R=ken2
CC=golang-dev
https://golang.org/cl/13624043
diff --git a/src/cmd/gc/walk.c b/src/cmd/gc/walk.c
index ff7d772..e539d25 100644
--- a/src/cmd/gc/walk.c
+++ b/src/cmd/gc/walk.c
@@ -1386,7 +1386,9 @@
 	// constants until walk. For example, if n is y%1 == 0, the
 	// walk of y%1 may have replaced it by 0.
 	// Check whether n with its updated args is itself now a constant.
+	t = n->type;
 	evconst(n);
+	n->type = t;
 	if(n->op == OLITERAL)
 		typecheck(&n, Erv);
 
diff --git a/test/fixedbugs/issue6298.go b/test/fixedbugs/issue6298.go
new file mode 100644
index 0000000..6303dbe
--- /dev/null
+++ b/test/fixedbugs/issue6298.go
@@ -0,0 +1,15 @@
+// compile
+
+// golang.org/issue/6298.
+// Used to cause "internal error: typename ideal bool"
+
+// Copyright 2013 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 main
+
+func main() {
+	var x interface{} = "abc"[0] == 'a'
+	_ = x
+}