]> Cypherpunks repositories - gostls13.git/commitdiff
test: implement negative rules in asmcheck
authorGiovanni Bajo <rasky@develer.com>
Thu, 1 Mar 2018 00:56:07 +0000 (01:56 +0100)
committerGiovanni Bajo <rasky@develer.com>
Thu, 1 Mar 2018 18:15:24 +0000 (18:15 +0000)
Change-Id: I2b507e35cc314100eaf2ec2d1e5107cc2fc9e7cf
Reviewed-on: https://go-review.googlesource.com/97818
Reviewed-by: Keith Randall <khr@golang.org>
test/run.go

index 8f2ec7e2f954cea384f965e89d9529cc3c8892e4..fd53095ab4bcb38c3e18795f917c6b43941a89e8 100644 (file)
@@ -1367,27 +1367,33 @@ func (t *test) asmCheck(outStr string, fn string, arch string, fullops map[strin
                }
        }
 
-       var notfound []wantedAsmOpcode
+       var failed []wantedAsmOpcode
        for _, ops := range fullops {
                for _, o := range ops {
-                       if !o.found {
-                               notfound = append(notfound, o)
+                       // There's a failure if a negative match was found,
+                       // or a positive match was not found.
+                       if o.negative == o.found {
+                               failed = append(failed, o)
                        }
                }
        }
-       if len(notfound) == 0 {
+       if len(failed) == 0 {
                return
        }
 
        // At least one asmcheck failed; report them
-       sort.Slice(notfound, func(i, j int) bool {
-               return notfound[i].line < notfound[j].line
+       sort.Slice(failed, func(i, j int) bool {
+               return failed[i].line < failed[j].line
        })
 
        var errbuf bytes.Buffer
        fmt.Fprintln(&errbuf)
-       for _, o := range notfound {
-               fmt.Fprintf(&errbuf, "%s:%d: %s: no match for opcode: %q\n", t.goFileName(), o.line, arch, o.opcode.String())
+       for _, o := range failed {
+               if o.negative {
+                       fmt.Fprintf(&errbuf, "%s:%d: %s: wrong opcode found: %q\n", t.goFileName(), o.line, arch, o.opcode.String())
+               } else {
+                       fmt.Fprintf(&errbuf, "%s:%d: %s: opcode not found: %q\n", t.goFileName(), o.line, arch, o.opcode.String())
+               }
        }
        err = errors.New(errbuf.String())
        return