| // runoutput | 
 |  | 
 | // Copyright 2014 The Go Authors. All rights reserved. | 
 | // Use of this source code is governed by a BSD-style | 
 | // license that can be found in the LICENSE file. | 
 |  | 
 | // Check that {5,6,8,9}g/ggen.c:clearfat is zeroing the entire object. | 
 |  | 
 | package main | 
 |  | 
 | import ( | 
 | 	"bytes" | 
 | 	"fmt" | 
 | 	"strconv" | 
 | 	"strings" | 
 | ) | 
 |  | 
 | const ntest = 1100 | 
 |  | 
 | func main() { | 
 | 	var decls, calls bytes.Buffer | 
 |  | 
 | 	for i := 1; i <= ntest; i++ { | 
 | 		s := strconv.Itoa(i) | 
 | 		decls.WriteString(strings.Replace(decl, "$", s, -1)) | 
 | 		calls.WriteString(strings.Replace("poison$()\n\tclearfat$()\n\t", "$", s, -1)) | 
 | 	} | 
 |  | 
 | 	program = strings.Replace(program, "$DECLS", decls.String(), 1) | 
 | 	program = strings.Replace(program, "$CALLS", calls.String(), 1) | 
 | 	fmt.Print(program) | 
 | } | 
 |  | 
 | var program = `package main | 
 |  | 
 | var count int | 
 |  | 
 | $DECLS | 
 |  | 
 | func main() { | 
 | 	$CALLS | 
 | 	if count != 0 { | 
 | 		println("failed", count, "case(s)") | 
 | 	} | 
 | } | 
 | ` | 
 |  | 
 | const decl = ` | 
 | func poison$() { | 
 | 	// Grow and poison the stack space that will be used by clearfat$ | 
 | 	var t [2*$]byte | 
 | 	for i := range t { | 
 | 		t[i] = 0xff | 
 | 	} | 
 | } | 
 |  | 
 | func clearfat$() { | 
 | 	var t [$]byte | 
 |  | 
 | 	for _, x := range t { | 
 | 		if x != 0 { | 
 | //			println("clearfat$: index", i, "expected 0, got", x) | 
 | 			count++ | 
 | 			break | 
 | 		} | 
 | 	} | 
 | } | 
 | ` |