From 9facf1f2c25dbd3da63c394e9f7f46b56a53f7ae Mon Sep 17 00:00:00 2001
From: Ian Lance Taylor <iant@golang.org>
Date: Tue, 25 Feb 2025 21:35:32 -0800
Subject: [PATCH] [release-branch.go1.23] runtime/cgo: avoid errors from
 -Wdeclaration-after-statement

It's used by the SWIG CI build, at least, and it's an easy fix.

[The change in x_cgo_sys_thread_create is gone, as that function was
already compliant in 1.23.]

Fixes #71962
For #71961

Change-Id: Id21071a5aef216b35ecf0e9cd3e05d08972d92fe
Reviewed-on: https://go-review.googlesource.com/c/go/+/652181
Reviewed-by: Cherry Mui <cherryyz@google.com>
Reviewed-by: Michael Pratt <mpratt@google.com>
LUCI-TryBot-Result: Go LUCI <golang-scoped@luci-project-accounts.iam.gserviceaccount.com>
Auto-Submit: Michael Pratt <mpratt@google.com>
(cherry picked from commit 76c70282538bf4cccd6f98b5b26df7f5a7f2cebd)
Reviewed-on: https://go-review.googlesource.com/c/go/+/652935
Reviewed-by: Michael Knyszek <mknyszek@google.com>
---
 src/runtime/cgo/cgo.go                | 3 ++-
 src/runtime/cgo/gcc_libinit.c         | 4 +++-
 src/runtime/cgo/gcc_libinit_windows.c | 4 +++-
 3 files changed, 8 insertions(+), 3 deletions(-)

diff --git a/src/runtime/cgo/cgo.go b/src/runtime/cgo/cgo.go
index 1e3a5029183..6b0acf70235 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 33a9ff93cad..6cceae34c6c 100644
--- a/src/runtime/cgo/gcc_libinit.c
+++ b/src/runtime/cgo/gcc_libinit.c
@@ -48,9 +48,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 9a8c65ea291..d43d12a24ae 100644
--- a/src/runtime/cgo/gcc_libinit_windows.c
+++ b/src/runtime/cgo/gcc_libinit_windows.c
@@ -69,8 +69,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;
 }
-- 
GitLab