aboutsummaryrefslogtreecommitdiff
path: root/src/runtime/debuglog_test.go
diff options
context:
space:
mode:
authorMichael Pratt <mpratt@google.com>2022-10-17 15:57:48 -0400
committerGopher Robot <gobot@golang.org>2022-10-18 16:59:26 +0000
commitc45ebef05edcb217be8f9bf1d7649763132727cc (patch)
tree572e1c2658e3ff2283407236931a3c8e82c60882 /src/runtime/debuglog_test.go
parent7cf06f070e56dfb6507122704bc75d697ccc350f (diff)
downloadgo-c45ebef05edcb217be8f9bf1d7649763132727cc.tar.xz
runtime: avoid unsafe.{Slice,String} in debuglog
CL 428157 and CL 428759 switched debuglog to using unsafe.String and unsafe.Slice, which broke the build with -tags=debuglog because this is a no write barrier context, but runtime.unsafeString and unsafeSlice can panic, which includes write barriers. We could add a panicCheck1 path to these functions to reallow write barriers, but it is a big mess to pass around the caller PC, particularly since the compiler generates calls. It is much simpler to just avoid unsafe.String and Slice. Also add a basic test to build the runtime with -tags=debuglog to help avoid future regressions. For #54854. Change-Id: I702418b986fbf189664e9aa4f40bc7de4d9e7781 Reviewed-on: https://go-review.googlesource.com/c/go/+/443380 Run-TryBot: Michael Pratt <mpratt@google.com> Auto-Submit: Michael Pratt <mpratt@google.com> TryBot-Result: Gopher Robot <gobot@golang.org> Reviewed-by: Michael Knyszek <mknyszek@google.com>
Diffstat (limited to 'src/runtime/debuglog_test.go')
-rw-r--r--src/runtime/debuglog_test.go12
1 files changed, 12 insertions, 0 deletions
diff --git a/src/runtime/debuglog_test.go b/src/runtime/debuglog_test.go
index 10dc72cf51..18c54a81b9 100644
--- a/src/runtime/debuglog_test.go
+++ b/src/runtime/debuglog_test.go
@@ -24,6 +24,7 @@ package runtime_test
import (
"fmt"
+ "internal/testenv"
"regexp"
"runtime"
"strings"
@@ -155,3 +156,14 @@ func TestDebugLogLongString(t *testing.T) {
t.Fatalf("want %q, got %q", want, got)
}
}
+
+// TestDebugLogBuild verifies that the runtime builds with -tags=debuglog.
+func TestDebugLogBuild(t *testing.T) {
+ testenv.MustHaveGoBuild(t)
+
+ // It doesn't matter which program we build, anything will rebuild the
+ // runtime.
+ if _, err := buildTestProg(t, "testprog", "-tags=debuglog"); err != nil {
+ t.Fatal(err)
+ }
+}