github.com/zach-klippenstein/go@v0.0.0-20150108044943-fcfbeb3adf58/test/clearfat.go (about)

     1  // runoutput
     2  
     3  // Copyright 2014 The Go Authors. All rights reserved.
     4  // Use of this source code is governed by a BSD-style
     5  // license that can be found in the LICENSE file.
     6  
     7  // Check that {5,6,8,9}g/ggen.c:clearfat is zeroing the entire object.
     8  
     9  package main
    10  
    11  import (
    12  	"bytes"
    13  	"fmt"
    14  	"strconv"
    15  	"strings"
    16  )
    17  
    18  const ntest = 1100
    19  
    20  func main() {
    21  	var decls, calls bytes.Buffer
    22  
    23  	for i := 1; i <= ntest; i++ {
    24  		s := strconv.Itoa(i)
    25  		decls.WriteString(strings.Replace(decl, "$", s, -1))
    26  		calls.WriteString(strings.Replace("poison$()\n\tclearfat$()\n\t", "$", s, -1))
    27  	}
    28  
    29  	program = strings.Replace(program, "$DECLS", decls.String(), 1)
    30  	program = strings.Replace(program, "$CALLS", calls.String(), 1)
    31  	fmt.Print(program)
    32  }
    33  
    34  var program = `package main
    35  
    36  var count int
    37  
    38  $DECLS
    39  
    40  func main() {
    41  	$CALLS
    42  	if count != 0 {
    43  		println("failed", count, "case(s)")
    44  	}
    45  }
    46  `
    47  
    48  const decl = `
    49  func poison$() {
    50  	// Grow and poison the stack space that will be used by clearfat$
    51  	var t [2*$]byte
    52  	for i := range t {
    53  		t[i] = 0xff
    54  	}
    55  }
    56  
    57  func clearfat$() {
    58  	var t [$]byte
    59  
    60  	for _, x := range t {
    61  		if x != 0 {
    62  //			println("clearfat$: index", i, "expected 0, got", x)
    63  			count++
    64  			break
    65  		}
    66  	}
    67  }
    68  `