]> Cypherpunks repositories - gostls13.git/commitdiff
[dev.ssa] cmd/compile/ssa: add checks for nil args in values
authorJosh Bleecher Snyder <josharian@gmail.com>
Mon, 29 Jun 2015 18:56:28 +0000 (11:56 -0700)
committerJosh Bleecher Snyder <josharian@gmail.com>
Wed, 1 Jul 2015 16:10:38 +0000 (16:10 +0000)
These additional checks were useful in
tracking down the broken build (CL 11238).

This CL does not fix the build, sadly.

Change-Id: I34de3bed223f450aaa97c1cadaba2e4e5850050b
Reviewed-on: https://go-review.googlesource.com/11681
Reviewed-by: Keith Randall <khr@golang.org>
src/cmd/compile/internal/gc/ssa.go
src/cmd/compile/internal/ssa/check.go
src/cmd/compile/internal/ssa/print.go

index d31d895f438ebc21c41ba34aa7694fde4dca8463..389d2868e8b8e6571bb7865757860743767a6713 100644 (file)
@@ -599,7 +599,11 @@ func (s *state) addr(n *Node) *ssa.Value {
                        return s.entryNewValue1A(ssa.OpAddr, Ptrto(n.Type), aux, s.sb)
                case PPARAM, PPARAMOUT, PAUTO:
                        // parameter/result slot or local variable
-                       return s.decladdrs[n]
+                       v := s.decladdrs[n]
+                       if v == nil {
+                               s.Fatalf("addr of undeclared ONAME %v. declared: %v", n, s.decladdrs)
+                       }
+                       return v
                case PAUTO | PHEAP:
                        return s.expr(n.Name.Heapaddr)
                default:
index e889177841174feebe2cbba40fa8ed5d300eebf5..a27e1bc653cdb79a59ef3553c700054a00072fe7 100644 (file)
@@ -92,6 +92,12 @@ func checkFunc(f *Func) {
                }
 
                for _, v := range b.Values {
+                       for _, arg := range v.Args {
+                               if arg == nil {
+                                       f.Fatalf("value %v has nil arg", v.LongString())
+                               }
+                       }
+
                        if valueMark[v.ID] {
                                f.Fatalf("value %s appears twice!", v.LongString())
                        }
index 23fdbca7c45f33d5e49cb71684c27ceaa80cda22..286152a0010b62ade6818e033bfda26a9f32d461 100644 (file)
@@ -49,7 +49,9 @@ func fprintFunc(w io.Writer, f *Func) {
                                        continue
                                }
                                for _, w := range v.Args {
-                                       if w.Block == b && !printed[w.ID] {
+                                       // w == nil shouldn't happen, but if it does,
+                                       // don't panic; we'll get a better diagnosis later.
+                                       if w != nil && w.Block == b && !printed[w.ID] {
                                                continue outer
                                        }
                                }