diff options
| author | Austin Clements <austin@google.com> | 2023-05-18 16:26:13 -0400 |
|---|---|---|
| committer | Austin Clements <austin@google.com> | 2023-05-19 01:37:39 +0000 |
| commit | b42ce3a65fd0ea323a67bc8bdbb2a88e7148dcc7 (patch) | |
| tree | d56bfb5fe575ac096f353b31f207638baf1e1462 /src/cmd/cgo | |
| parent | 3ebbaf3a4dbde6f0298978f502f5058fb0e9e948 (diff) | |
| download | go-b42ce3a65fd0ea323a67bc8bdbb2a88e7148dcc7.tar.xz | |
cmd/cgo/internal/testtls: cleanup and support more arches
Currently, this test only enabled on non-Darwin UNIX platforms because
it uses the non-standard _thread attribute for thread-local storage.
C11 introduced a standard way to declare something thread-local, so
this CL takes advantage of that to generalize the test to Darwin and
Windows.
Change-Id: Iba31b6216721df6eb8e978d7487cd3a787cae588
Reviewed-on: https://go-review.googlesource.com/c/go/+/496295
Reviewed-by: Bryan Mills <bcmills@google.com>
TryBot-Result: Gopher Robot <gobot@golang.org>
Run-TryBot: Austin Clements <austin@google.com>
Diffstat (limited to 'src/cmd/cgo')
| -rw-r--r-- | src/cmd/cgo/internal/testtls/tls.c | 32 | ||||
| -rw-r--r-- | src/cmd/cgo/internal/testtls/tls.go | 8 | ||||
| -rw-r--r-- | src/cmd/cgo/internal/testtls/tls_none.go | 4 |
3 files changed, 35 insertions, 9 deletions
diff --git a/src/cmd/cgo/internal/testtls/tls.c b/src/cmd/cgo/internal/testtls/tls.c index 0e2bbee542..8839cc8676 100644 --- a/src/cmd/cgo/internal/testtls/tls.c +++ b/src/cmd/cgo/internal/testtls/tls.c @@ -2,13 +2,18 @@ // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. -// Darwin does not have __thread. +#include <stddef.h> -//go:build cgo && unix && !darwin +#if __STDC_VERSION__ >= 201112L && !defined(__STDC_NO_THREADS__) -#include <pthread.h> +// Mingw seems not to have threads.h, so we use the _Thread_local keyword rather +// than the thread_local macro. +static _Thread_local int tls; -static __thread int tls; +const char * +checkTLS() { + return NULL; +} void setTLS(int v) @@ -21,3 +26,22 @@ getTLS() { return tls; } + +#else + +const char * +checkTLS() { + return "_Thread_local requires C11 and not __STDC_NO_THREADS__"; +} + +void +setTLS(int v) { +} + +int +getTLS() +{ + return 0; +} + +#endif diff --git a/src/cmd/cgo/internal/testtls/tls.go b/src/cmd/cgo/internal/testtls/tls.go index eb59ad41eb..78628f5caa 100644 --- a/src/cmd/cgo/internal/testtls/tls.go +++ b/src/cmd/cgo/internal/testtls/tls.go @@ -2,11 +2,9 @@ // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. -//go:build cgo && unix && !darwin - package cgotlstest -// #include <pthread.h> +// extern const char *checkTLS(); // extern void setTLS(int); // extern int getTLS(); import "C" @@ -17,6 +15,10 @@ import ( ) func testTLS(t *testing.T) { + if skip := C.checkTLS(); skip != nil { + t.Skipf("%s", C.GoString(skip)) + } + runtime.LockOSThread() defer runtime.UnlockOSThread() diff --git a/src/cmd/cgo/internal/testtls/tls_none.go b/src/cmd/cgo/internal/testtls/tls_none.go index 81c9c5e23d..b6033fb76d 100644 --- a/src/cmd/cgo/internal/testtls/tls_none.go +++ b/src/cmd/cgo/internal/testtls/tls_none.go @@ -2,12 +2,12 @@ // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. -//go:build !(cgo && unix && !darwin) +//go:build !cgo package cgotlstest import "testing" func testTLS(t *testing.T) { - t.Skip("__thread is not supported") + t.Skip("cgo not supported") } |
