From: Ian Lance Taylor Date: Wed, 26 Feb 2025 05:35:32 +0000 (-0800) Subject: [release-branch.go1.24] runtime/cgo: avoid errors from -Wdeclaration-after-statement X-Git-Tag: go1.24.1~5 X-Git-Url: http://www.git.cypherpunks.su/?a=commitdiff_plain;h=45a52718e31d6c268aaef8346d73c8fb12fca56c;p=gostls13.git [release-branch.go1.24] runtime/cgo: avoid errors from -Wdeclaration-after-statement It's used by the SWIG CI build, at least, and it's an easy fix. Fixes #71963 For #71961 Change-Id: Id21071a5aef216b35ecf0e9cd3e05d08972d92fe Reviewed-on: https://go-review.googlesource.com/c/go/+/652181 Reviewed-by: Cherry Mui Reviewed-by: Michael Pratt LUCI-TryBot-Result: Go LUCI Auto-Submit: Michael Pratt (cherry picked from commit 76c70282538bf4cccd6f98b5b26df7f5a7f2cebd) Reviewed-on: https://go-review.googlesource.com/c/go/+/652936 Reviewed-by: Michael Knyszek --- diff --git a/src/runtime/cgo/cgo.go b/src/runtime/cgo/cgo.go index c37135fbbe..c90fb424ac 100644 --- a/src/runtime/cgo/cgo.go +++ b/src/runtime/cgo/cgo.go @@ -25,7 +25,8 @@ package cgo // Use -fno-stack-protector to avoid problems locating the // proper support functions. See issues #52919, #54313, #58385. -#cgo CFLAGS: -Wall -Werror -fno-stack-protector +// Use -Wdeclaration-after-statement because some CI builds use it. +#cgo CFLAGS: -Wall -Werror -fno-stack-protector -Wdeclaration-after-statement #cgo solaris CPPFLAGS: -D_POSIX_PTHREAD_SEMANTICS diff --git a/src/runtime/cgo/gcc_libinit.c b/src/runtime/cgo/gcc_libinit.c index 2fe76e4360..e9b0a3f769 100644 --- a/src/runtime/cgo/gcc_libinit.c +++ b/src/runtime/cgo/gcc_libinit.c @@ -39,10 +39,11 @@ void x_cgo_sys_thread_create(void* (*func)(void*), void* arg) { pthread_attr_t attr; pthread_t p; + int err; pthread_attr_init(&attr); pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_DETACHED); - int err = _cgo_try_pthread_create(&p, &attr, func, arg); + err = _cgo_try_pthread_create(&p, &attr, func, arg); if (err != 0) { fprintf(stderr, "pthread_create failed: %s", strerror(err)); abort(); @@ -52,9 +53,11 @@ x_cgo_sys_thread_create(void* (*func)(void*), void* arg) { uintptr_t _cgo_wait_runtime_init_done(void) { void (*pfn)(struct context_arg*); + int done; + pfn = __atomic_load_n(&cgo_context_function, __ATOMIC_CONSUME); - int done = 2; + done = 2; if (__atomic_load_n(&runtime_init_done, __ATOMIC_CONSUME) != done) { pthread_mutex_lock(&runtime_init_mu); while (__atomic_load_n(&runtime_init_done, __ATOMIC_CONSUME) == 0) { diff --git a/src/runtime/cgo/gcc_libinit_windows.c b/src/runtime/cgo/gcc_libinit_windows.c index ddc0ad7010..577a686eaa 100644 --- a/src/runtime/cgo/gcc_libinit_windows.c +++ b/src/runtime/cgo/gcc_libinit_windows.c @@ -75,8 +75,10 @@ x_cgo_sys_thread_create(void (*func)(void*), void* arg) { int _cgo_is_runtime_initialized() { + int status; + EnterCriticalSection(&runtime_init_cs); - int status = runtime_init_done; + status = runtime_init_done; LeaveCriticalSection(&runtime_init_cs); return status; }