libgo: update to Go 1.8 release candidate 1

Compiler changes:
      * Change map assignment to use mapassign and assign value directly.
      * Change string iteration to use decoderune, faster for ASCII strings.
      * Change makeslice to take int, and use makeslice64 for larger values.
      * Add new noverflow field to hmap struct used for maps.
    
    Unresolved problems, to be fixed later:
      * Commented out test in go/types/sizes_test.go that doesn't compile.
      * Commented out reflect.TestStructOf test for padding after zero-sized field.
    
    Reviewed-on: https://go-review.googlesource.com/35231

gotools/:
	Updates for Go 1.8rc1.
	* Makefile.am (go_cmd_go_files): Add bug.go.
	(s-zdefaultcc): Write defaultPkgConfig.
	* Makefile.in: Rebuild.

From-SVN: r244456
This commit is contained in:
Ian Lance Taylor 2017-01-14 00:05:42 +00:00 committed by Ian Lance Taylor
parent 829afb8f05
commit c2047754c3
983 changed files with 69318 additions and 17662 deletions

View file

@ -9,6 +9,7 @@ package net
import (
"bytes"
"internal/testenv"
"io/ioutil"
"os"
"reflect"
"runtime"
@ -414,33 +415,104 @@ func TestUnixUnlink(t *testing.T) {
t.Skip("unix test")
}
name := testUnixAddr()
l, err := Listen("unix", name)
if err != nil {
t.Fatal(err)
listen := func(t *testing.T) *UnixListener {
l, err := Listen("unix", name)
if err != nil {
t.Fatal(err)
}
return l.(*UnixListener)
}
if _, err := os.Stat(name); err != nil {
t.Fatalf("cannot stat unix socket after ListenUnix: %v", err)
checkExists := func(t *testing.T, desc string) {
if _, err := os.Stat(name); err != nil {
t.Fatalf("unix socket does not exist %s: %v", desc, err)
}
}
f, _ := l.(*UnixListener).File()
l1, err := FileListener(f)
if err != nil {
t.Fatal(err)
}
if _, err := os.Stat(name); err != nil {
t.Fatalf("cannot stat unix socket after FileListener: %v", err)
}
if err := l1.Close(); err != nil {
t.Fatalf("closing file listener: %v", err)
}
if _, err := os.Stat(name); err != nil {
t.Fatalf("cannot stat unix socket after closing FileListener: %v", err)
}
f.Close()
if _, err := os.Stat(name); err != nil {
t.Fatalf("cannot stat unix socket after closing FileListener and fd: %v", err)
}
l.Close()
if _, err := os.Stat(name); err == nil {
t.Fatal("closing unix listener did not remove unix socket")
checkNotExists := func(t *testing.T, desc string) {
if _, err := os.Stat(name); err == nil {
t.Fatalf("unix socket does exist %s: %v", desc, err)
}
}
// Listener should remove on close.
t.Run("Listen", func(t *testing.T) {
l := listen(t)
checkExists(t, "after Listen")
l.Close()
checkNotExists(t, "after Listener close")
})
// FileListener should not.
t.Run("FileListener", func(t *testing.T) {
l := listen(t)
f, _ := l.File()
l1, _ := FileListener(f)
checkExists(t, "after FileListener")
f.Close()
checkExists(t, "after File close")
l1.Close()
checkExists(t, "after FileListener close")
l.Close()
checkNotExists(t, "after Listener close")
})
// Only first call to l.Close should remove.
t.Run("SecondClose", func(t *testing.T) {
l := listen(t)
checkExists(t, "after Listen")
l.Close()
checkNotExists(t, "after Listener close")
if err := ioutil.WriteFile(name, []byte("hello world"), 0666); err != nil {
t.Fatalf("cannot recreate socket file: %v", err)
}
checkExists(t, "after writing temp file")
l.Close()
checkExists(t, "after second Listener close")
os.Remove(name)
})
// SetUnlinkOnClose should do what it says.
t.Run("Listen/SetUnlinkOnClose(true)", func(t *testing.T) {
l := listen(t)
checkExists(t, "after Listen")
l.SetUnlinkOnClose(true)
l.Close()
checkNotExists(t, "after Listener close")
})
t.Run("Listen/SetUnlinkOnClose(false)", func(t *testing.T) {
l := listen(t)
checkExists(t, "after Listen")
l.SetUnlinkOnClose(false)
l.Close()
checkExists(t, "after Listener close")
os.Remove(name)
})
t.Run("FileListener/SetUnlinkOnClose(true)", func(t *testing.T) {
l := listen(t)
f, _ := l.File()
l1, _ := FileListener(f)
checkExists(t, "after FileListener")
l1.(*UnixListener).SetUnlinkOnClose(true)
f.Close()
checkExists(t, "after File close")
l1.Close()
checkNotExists(t, "after FileListener close")
l.Close()
})
t.Run("FileListener/SetUnlinkOnClose(false)", func(t *testing.T) {
l := listen(t)
f, _ := l.File()
l1, _ := FileListener(f)
checkExists(t, "after FileListener")
l1.(*UnixListener).SetUnlinkOnClose(false)
f.Close()
checkExists(t, "after File close")
l1.Close()
checkExists(t, "after FileListener close")
l.Close()
})
}