diff --git a/src/cmd/gc/sinit.c b/src/cmd/gc/sinit.c
index 8ad7ae7..8c24c12 100644
--- a/src/cmd/gc/sinit.c
+++ b/src/cmd/gc/sinit.c
@@ -374,7 +374,7 @@
 static int
 staticassign(Node *l, Node *r, NodeList **out)
 {
-	Node *a, n1;
+	Node *a, n1, nam;
 	Type *ta;
 	InitPlan *p;
 	InitEntry *e;
@@ -398,13 +398,10 @@
 		return 1;
 
 	case OADDR:
-		switch(r->left->op) {
-		default:
-			//dump("not static addr", r);
-			break;
-
-		case ONAME:
-			gdata(l, r, l->type->width);
+		if(stataddr(&nam, r->left)) {
+			n1 = *r;
+			n1.left = &nam;
+			gdata(l, &n1, l->type->width);
 			return 1;
 		}
 	
diff --git a/test/fixedbugs/issue9355.dir/a.go b/test/fixedbugs/issue9355.dir/a.go
new file mode 100644
index 0000000..84500c8
--- /dev/null
+++ b/test/fixedbugs/issue9355.dir/a.go
@@ -0,0 +1,16 @@
+package main
+
+var x struct {
+	a, b, c int64
+	d       struct{ p, q, r int32 }
+	e       [8]byte
+	f       [4]struct{ p, q, r int32 }
+}
+
+var y = &x.b
+var z = &x.d.q
+
+var b [10]byte
+var c = &b[5]
+
+var w = &x.f[3].r
diff --git a/test/fixedbugs/issue9355.go b/test/fixedbugs/issue9355.go
new file mode 100644
index 0000000..7903ff2
--- /dev/null
+++ b/test/fixedbugs/issue9355.go
@@ -0,0 +1,51 @@
+// run
+
+// Copyright 2014 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
+
+import (
+	"fmt"
+	"go/build"
+	"os"
+	"os/exec"
+	"path/filepath"
+	"regexp"
+	"runtime"
+)
+
+func main() {
+	if runtime.Compiler != "gc" {
+		return
+	}
+	a, err := build.ArchChar(runtime.GOARCH)
+	if err != nil {
+		fmt.Println("BUG:", err)
+		os.Exit(1)
+	}
+	out := run("go", "tool", a+"g", "-S", filepath.Join("fixedbugs", "issue9355.dir", "a.go"))
+	patterns := []string{
+		`rel 0\+\d t=1 \"\"\.x\+8\n`,  // y = &x.b
+		`rel 0\+\d t=1 \"\"\.x\+28\n`, // z = &x.d.q
+		`rel 0\+\d t=1 \"\"\.b\+5\n`,  // c = &b[5]
+		`rel 0\+\d t=1 \"\"\.x\+88\n`, // w = &x.f[3].r
+	}
+	for _, p := range patterns {
+		if ok, err := regexp.Match(p, out); !ok || err != nil {
+			println(string(out))
+			panic("can't find pattern " + p)
+		}
+	}
+}
+
+func run(cmd string, args ...string) []byte {
+	out, err := exec.Command(cmd, args...).CombinedOutput()
+	if err != nil {
+		fmt.Println(string(out))
+		fmt.Println(err)
+		os.Exit(1)
+	}
+	return out
+}
