|  | #!/usr/bin/env bash | 
|  |  | 
|  | # Copyright 2016 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. | 
|  |  | 
|  | # A simple script to compare differences between | 
|  | # assembly listings for packages built with different | 
|  | # compiler flags. It is useful to inspect the impact | 
|  | # of a compiler change across all std lib packages. | 
|  | # | 
|  | # The script builds the std library (make.bash) once | 
|  | # with FLAGS1 and once with FLAGS2 and compares the | 
|  | # "go build <pkg>" assembly output for each package | 
|  | # and lists the packages with differences. | 
|  | # | 
|  | # It leaves and old.txt and new.txt file in the package | 
|  | # directories for the packages with differences. | 
|  |  | 
|  | FLAGS1="-newexport=0" | 
|  | FLAGS2="-newexport=1" | 
|  |  | 
|  | echo | 
|  | echo | 
|  | echo "1a) clean build using $FLAGS1" | 
|  | (export GO_GCFLAGS="$FLAGS1"; sh make.bash) | 
|  |  | 
|  | echo | 
|  | echo | 
|  | echo "1b) save go build output for all packages" | 
|  | for pkg in `go list std`; do | 
|  | echo $pkg | 
|  | DIR=$GOROOT/src/$pkg | 
|  | go build -gcflags "$FLAGS1 -S" -o /dev/null $pkg &> $DIR/old.txt | 
|  | done | 
|  |  | 
|  | echo | 
|  | echo | 
|  | echo "2a) clean build using $FLAGS2" | 
|  | (export GO_GCFLAGS="$FLAGS2"; sh make.bash) | 
|  |  | 
|  | echo | 
|  | echo | 
|  | echo "2b) save go build output for all packages" | 
|  | for pkg in `go list std`; do | 
|  | echo $pkg | 
|  | DIR=$GOROOT/src/$pkg | 
|  | go build -gcflags "$FLAGS2 -S" -o /dev/null $pkg &> $DIR/new.txt | 
|  | done | 
|  |  | 
|  | echo | 
|  | echo | 
|  | echo "3) compare assembly files" | 
|  | for pkg in `go list std`; do | 
|  | DIR=$GOROOT/src/$pkg | 
|  |  | 
|  | if cmp $DIR/old.txt $DIR/new.txt &> /dev/null | 
|  | then rm $DIR/old.txt $DIR/new.txt | 
|  | else echo "==> $DIR" | 
|  | fi | 
|  | done |