]> Cypherpunks repositories - gostls13.git/commitdiff
[dev.typeparams] cmd/compile/internal/syntax: don't panic when providing -verify
authorRobert Griesemer <gri@golang.org>
Wed, 16 Dec 2020 05:55:28 +0000 (21:55 -0800)
committerRobert Griesemer <gri@golang.org>
Wed, 16 Dec 2020 18:41:38 +0000 (18:41 +0000)
The -verify flag is used to verify idempotent printing of syntax
trees. While syntax tree printing is not actively used at the
moment, the verification code still shouldn't panic.

Fixed the cause for the panic (after reading from a bytes.Buffer
that buffer is empty and so doesn't compare to the unread buffer),
and replaced the panic with a test error.

Added a test that makes sure the code invoked by -verify is run.

Change-Id: I38634ed7cfa8668deb0ea2ee9fb74a8f86cfc195
Reviewed-on: https://go-review.googlesource.com/c/go/+/278477
Trust: Robert Griesemer <gri@golang.org>
Run-TryBot: Robert Griesemer <gri@golang.org>
TryBot-Result: Go Bot <gobot@golang.org>
Reviewed-by: Robert Findley <rfindley@google.com>
src/cmd/compile/internal/syntax/parser_test.go

index 70651efeae4e15b001cb67502a5f487d53b97ae0..ea9e9acc83c2e512e5c0ea7e23cd525ed1836c26 100644 (file)
@@ -29,6 +29,14 @@ func TestParse(t *testing.T) {
        ParseFile(*src_, func(err error) { t.Error(err) }, nil, AllowGenerics)
 }
 
+func TestVerify(t *testing.T) {
+       ast, err := ParseFile(*src_, func(err error) { t.Error(err) }, nil, AllowGenerics)
+       if err != nil {
+               return // error already reported
+       }
+       verifyPrint(t, *src_, ast)
+}
+
 func TestParseGo2(t *testing.T) {
        dir := filepath.Join(testdata, "go2")
        list, err := ioutil.ReadDir(dir)
@@ -91,7 +99,7 @@ func testStdLib(t *testing.T, mode Mode) {
                                        return
                                }
                                if *verify {
-                                       verifyPrint(filename, ast)
+                                       verifyPrint(t, filename, ast)
                                }
                                results <- parseResult{filename, ast.EOF.Line()}
                        })
@@ -159,12 +167,13 @@ func walkDirs(t *testing.T, dir string, action func(string)) {
        }
 }
 
-func verifyPrint(filename string, ast1 *File) {
+func verifyPrint(t *testing.T, filename string, ast1 *File) {
        var buf1 bytes.Buffer
        _, err := Fprint(&buf1, ast1, true)
        if err != nil {
                panic(err)
        }
+       bytes1 := buf1.Bytes()
 
        ast2, err := Parse(NewFileBase(filename), &buf1, nil, nil, 0)
        if err != nil {
@@ -176,16 +185,18 @@ func verifyPrint(filename string, ast1 *File) {
        if err != nil {
                panic(err)
        }
+       bytes2 := buf2.Bytes()
 
-       if bytes.Compare(buf1.Bytes(), buf2.Bytes()) != 0 {
+       if bytes.Compare(bytes1, bytes2) != 0 {
                fmt.Printf("--- %s ---\n", filename)
-               fmt.Printf("%s\n", buf1.Bytes())
+               fmt.Printf("%s\n", bytes1)
                fmt.Println()
 
                fmt.Printf("--- %s ---\n", filename)
-               fmt.Printf("%s\n", buf2.Bytes())
+               fmt.Printf("%s\n", bytes2)
                fmt.Println()
-               panic("not equal")
+
+               t.Error("printed syntax trees do not match")
        }
 }