summaryrefslogtreecommitdiff
path: root/libgo/testsuite/gotest
diff options
context:
space:
mode:
authorIan Lance Taylor <ian@gcc.gnu.org>2016-08-03 22:46:06 +0000
committerIan Lance Taylor <ian@gcc.gnu.org>2016-08-03 22:46:06 +0000
commit9c26dfd08a1374c6c1137ad13b9bfe402c66d299 (patch)
tree38f3f1c3dbee66f77aa716bd1022a2c9a6b1781d /libgo/testsuite/gotest
parentac2c96ab1233e1c3dcd29a4854ae4eb7d0f68199 (diff)
gotest: multiple +build lines must all be true
The code that handled +build lines did not correctly require them to all be true. While looking into this I discovered that multiple +build lines were mishandled in a different way, because the shell does not preseve line breaks in backquoted data. Look for the +build token to tell us when we are switching from one +build line to another. Reviewed-on: https://go-review.googlesource.com/25460 From-SVN: r239100
Diffstat (limited to 'libgo/testsuite/gotest')
-rwxr-xr-xlibgo/testsuite/gotest94
1 files changed, 49 insertions, 45 deletions
diff --git a/libgo/testsuite/gotest b/libgo/testsuite/gotest
index 79e02e2a1ea..1f19bb5809c 100755
--- a/libgo/testsuite/gotest
+++ b/libgo/testsuite/gotest
@@ -313,56 +313,60 @@ x)
esac
if test x$tag1 != xnonmatchingtag -a x$tag2 != xnonmatchingtag; then
- taglines=`sed '/^package /q' < $f | fgrep '// +build '`
- if test "$taglines" = ""; then
- omatch=true
- else
- omatch=false
- fi
- for tags in $taglines; do
- match=false
- for tag in $tags; do
- reverse=false
- case $tag in
- "!"*)
- reverse=true
- tag=`echo $tag | sed -e 's/^!//'`
- ;;
- esac
-
- case $tag in
- "//" | "+build")
- ;;
- $goos | $goarch | cgo)
- match=true
- ;;
- *,*)
- match=true
- for ctag in `echo $tag | sed -e 's/,/ /g'`; do
- case $ctag in
- $goos | $goarch | cgo)
- ;;
- *)
- match=false
- ;;
- esac
- done
- ;;
- esac
-
- if test "$reverse" = true; then
- if test "$match" = true; then
+ tags=`sed '/^package /q' < $f | fgrep '// +build '`
+ omatch=true
+ first=true
+ match=false
+ for tag in $tags; do
+ reverse=false
+ case $tag in
+ "!"*)
+ reverse=true
+ tag=`echo $tag | sed -e 's/^!//'`
+ ;;
+ esac
+
+ case $tag in
+ "//")
+ ;;
+ "+build")
+ if test "$first" = "true"; then
+ first=false
+ elif test "$match" = "false"; then
+ omatch=false
+ fi
+ match=false
+ ;;
+ $goos | $goarch | cgo)
+ match=true
+ ;;
+ *,*)
+ match=true
+ for ctag in `echo $tag | sed -e 's/,/ /g'`; do
+ case $ctag in
+ $goos | $goarch | cgo)
+ ;;
+ *)
match=false
- else
- match=true
- fi
+ ;;
+ esac
+ done
+ ;;
+ esac
+
+ if test "$reverse" = true; then
+ if test "$match" = true; then
+ match=false
+ else
+ match=true
fi
- done
- if test "$match" = "true"; then
- omatch=true
fi
done
+ if test "$match" = "false" -a "$first" = "false"; then
+ omatch=false
+ fi
+
if test "$omatch" = "true"; then
gofiles="$gofiles $f"
fi