cmd/compile: move Node.Pack to Node.Name.Pack

$ sizeof -p cmd/compile/internal/gc Node
Node 232
$

Change-Id: I4be025f4ec11f882f24ae7582821d36d3b122b77
Reviewed-on: https://go-review.googlesource.com/10526
Reviewed-by: Josh Bleecher Snyder <josharian@gmail.com>
Reviewed-by: Ian Lance Taylor <iant@golang.org>
diff --git a/src/cmd/compile/internal/gc/align.go b/src/cmd/compile/internal/gc/align.go
index 892595a..54e840d 100644
--- a/src/cmd/compile/internal/gc/align.go
+++ b/src/cmd/compile/internal/gc/align.go
@@ -432,6 +432,7 @@
 	Types[TUNSAFEPTR] = t
 	t.Sym = Pkglookup("Pointer", unsafepkg)
 	t.Sym.Def = typenod(t)
+	t.Sym.Def.Name = new(Name)
 
 	dowidth(Types[TUNSAFEPTR])
 
@@ -654,6 +655,7 @@
 		dowidth(t)
 		Types[etype] = t
 		s1.Def = typenod(t)
+		s1.Def.Name = new(Name)
 	}
 
 	Array_array = int(Rnd(0, int64(Widthptr)))
diff --git a/src/cmd/compile/internal/gc/dcl.go b/src/cmd/compile/internal/gc/dcl.go
index fc2f14a..2a88861 100644
--- a/src/cmd/compile/internal/gc/dcl.go
+++ b/src/cmd/compile/internal/gc/dcl.go
@@ -174,6 +174,10 @@
 		return
 	}
 
+	if n.Name == nil {
+		// named OLITERAL needs Name; most OLITERALs don't.
+		n.Name = new(Name)
+	}
 	n.Lineno = int32(parserline())
 	s := n.Sym
 
diff --git a/src/cmd/compile/internal/gc/export.go b/src/cmd/compile/internal/gc/export.go
index 623d61a..33aa0ad 100644
--- a/src/cmd/compile/internal/gc/export.go
+++ b/src/cmd/compile/internal/gc/export.go
@@ -416,6 +416,7 @@
 		t := typ(TFORW)
 		t.Sym = s
 		s.Def = typenod(t)
+		s.Def.Name = new(Name)
 	}
 
 	if s.Def.Type == nil {
diff --git a/src/cmd/compile/internal/gc/go.y b/src/cmd/compile/internal/gc/go.y
index b8e9ceb..b37d394 100644
--- a/src/cmd/compile/internal/gc/go.y
+++ b/src/cmd/compile/internal/gc/go.y
@@ -1221,8 +1221,8 @@
 	sym	%prec NotParen
 	{
 		$$ = oldname($1);
-		if $$.Pack != nil {
-			$$.Pack.Used = true;
+		if $$.Name != nil && $$.Name.Pack != nil {
+			$$.Name.Pack.Used = true;
 		}
 	}
 
@@ -1687,8 +1687,8 @@
 
 		$$ = $1;
 		n = oldname($1);
-		if n.Pack != nil {
-			n.Pack.Used = true;
+		if n.Name != nil && n.Name.Pack != nil {
+			n.Name.Pack.Used = true;
 		}
 	}
 |	LNAME '.' sym
diff --git a/src/cmd/compile/internal/gc/lex.go b/src/cmd/compile/internal/gc/lex.go
index fd64dab..32452e6 100644
--- a/src/cmd/compile/internal/gc/lex.go
+++ b/src/cmd/compile/internal/gc/lex.go
@@ -2182,6 +2182,7 @@
 
 			s1.Lexical = LNAME
 			s1.Def = typenod(t)
+			s1.Def.Name = new(Name)
 			continue
 		}
 
@@ -2207,11 +2208,13 @@
 	s = Pkglookup("true", builtinpkg)
 	s.Def = Nodbool(true)
 	s.Def.Sym = Lookup("true")
+	s.Def.Name = new(Name)
 	s.Def.Type = idealbool
 
 	s = Pkglookup("false", builtinpkg)
 	s.Def = Nodbool(false)
 	s.Def.Sym = Lookup("false")
+	s.Def.Name = new(Name)
 	s.Def.Type = idealbool
 
 	s = Lookup("_")
@@ -2235,6 +2238,7 @@
 	v.U = new(NilVal)
 	s.Def = nodlit(v)
 	s.Def.Sym = s
+	s.Def.Name = new(Name)
 }
 
 func lexinit1() {
@@ -2282,6 +2286,7 @@
 	bytetype.Sym = s1
 	s1.Lexical = LNAME
 	s1.Def = typenod(bytetype)
+	s1.Def.Name = new(Name)
 
 	// rune alias
 	s = Lookup("rune")
@@ -2292,6 +2297,7 @@
 	runetype.Sym = s1
 	s1.Lexical = LNAME
 	s1.Def = typenod(runetype)
+	s1.Def.Name = new(Name)
 }
 
 func lexfini() {
@@ -2311,6 +2317,7 @@
 		etype = syms[i].etype
 		if etype != Txxx && (etype != TANY || Debug['A'] != 0) && s.Def == nil {
 			s.Def = typenod(Types[etype])
+			s.Def.Name = new(Name)
 			s.Origpkg = builtinpkg
 		}
 
@@ -2328,6 +2335,7 @@
 		s = Lookup(Thearch.Typedefs[i].Name)
 		if s.Def == nil {
 			s.Def = typenod(Types[Thearch.Typedefs[i].Etype])
+			s.Def.Name = new(Name)
 			s.Origpkg = builtinpkg
 		}
 	}
@@ -2338,18 +2346,21 @@
 
 	if s.Def == nil {
 		s.Def = typenod(bytetype)
+		s.Def.Name = new(Name)
 		s.Origpkg = builtinpkg
 	}
 
 	s = Lookup("error")
 	if s.Def == nil {
 		s.Def = typenod(errortype)
+		s.Def.Name = new(Name)
 		s.Origpkg = builtinpkg
 	}
 
 	s = Lookup("rune")
 	if s.Def == nil {
 		s.Def = typenod(runetype)
+		s.Def.Name = new(Name)
 		s.Origpkg = builtinpkg
 	}
 
@@ -2359,6 +2370,7 @@
 		v.U = new(NilVal)
 		s.Def = nodlit(v)
 		s.Def.Sym = s
+		s.Def.Name = new(Name)
 		s.Origpkg = builtinpkg
 	}
 
@@ -2373,6 +2385,7 @@
 	if s.Def == nil {
 		s.Def = Nodbool(true)
 		s.Def.Sym = s
+		s.Def.Name = new(Name)
 		s.Origpkg = builtinpkg
 	}
 
@@ -2380,6 +2393,7 @@
 	if s.Def == nil {
 		s.Def = Nodbool(false)
 		s.Def.Sym = s
+		s.Def.Name = new(Name)
 		s.Origpkg = builtinpkg
 	}
 
@@ -2572,9 +2586,9 @@
 			if s.Def.Sym != s {
 				// throw away top-level name left over
 				// from previous import . "x"
-				if s.Def.Pack != nil && !s.Def.Pack.Used && nsyntaxerrors == 0 {
-					pkgnotused(int(s.Def.Pack.Lineno), s.Def.Pack.Pkg.Path, "")
-					s.Def.Pack.Used = true
+				if s.Def.Name != nil && s.Def.Name.Pack != nil && !s.Def.Name.Pack.Used && nsyntaxerrors == 0 {
+					pkgnotused(int(s.Def.Name.Pack.Lineno), s.Def.Name.Pack.Pkg.Path, "")
+					s.Def.Name.Pack.Used = true
 				}
 
 				s.Def = nil
diff --git a/src/cmd/compile/internal/gc/subr.go b/src/cmd/compile/internal/gc/subr.go
index 4dd8b29..dc85dc4 100644
--- a/src/cmd/compile/internal/gc/subr.go
+++ b/src/cmd/compile/internal/gc/subr.go
@@ -331,7 +331,10 @@
 
 		s1.Def = s.Def
 		s1.Block = s.Block
-		s1.Def.Pack = pack
+		if s1.Def.Name == nil {
+			Dump("s1def", s1.Def)
+		}
+		s1.Def.Name.Pack = pack
 		s1.Origpkg = opkg
 		n++
 	}
diff --git a/src/cmd/compile/internal/gc/syntax.go b/src/cmd/compile/internal/gc/syntax.go
index 02b5e95..5878c68 100644
--- a/src/cmd/compile/internal/gc/syntax.go
+++ b/src/cmd/compile/internal/gc/syntax.go
@@ -30,7 +30,6 @@
 
 	// ONAME
 	Name  *Name
-	Pack  *Node // real package for import . names
 	Curfn *Node // function for local variables
 	Param *Param
 
@@ -94,6 +93,7 @@
 
 // Name holds Node fields used only by ONAME nodes.
 type Name struct {
+	Pack      *Node // real package for import . names
 	Heapaddr  *Node // temp holding heap address of param
 	Inlvar    *Node // ONAME substitute while inlining
 	Defn      *Node // initializing assignment
diff --git a/src/cmd/compile/internal/gc/y.go b/src/cmd/compile/internal/gc/y.go
index 1ee619f..7399dde 100644
--- a/src/cmd/compile/internal/gc/y.go
+++ b/src/cmd/compile/internal/gc/y.go
@@ -2390,8 +2390,8 @@
 		//line go.y:1222
 		{
 			yyVAL.node = oldname(yyDollar[1].sym)
-			if yyVAL.node.Pack != nil {
-				yyVAL.node.Pack.Used = true
+			if yyVAL.node.Name != nil && yyVAL.node.Name.Pack != nil {
+				yyVAL.node.Name.Pack.Used = true
 			}
 		}
 	case 164:
@@ -2846,8 +2846,8 @@
 
 			yyVAL.sym = yyDollar[1].sym
 			n = oldname(yyDollar[1].sym)
-			if n.Pack != nil {
-				n.Pack.Used = true
+			if n.Name != nil && n.Name.Pack != nil {
+				n.Name.Pack.Used = true
 			}
 		}
 	case 237: