mirror of
https://github.com/golang/go
synced 2024-09-15 22:20:06 +00:00
test: implement negative rules in asmcheck
Change-Id: I2b507e35cc314100eaf2ec2d1e5107cc2fc9e7cf Reviewed-on: https://go-review.googlesource.com/97818 Reviewed-by: Keith Randall <khr@golang.org>
This commit is contained in:
parent
0bcf8bcd99
commit
f16cc298d3
22
test/run.go
22
test/run.go
|
@ -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
|
||||
|
|
Loading…
Reference in a new issue