Improve codegen for address pinning.
We avoid one instruction and the memory access.

Instead of generating:

```
leaq   0xb98201(%rip), %rax
movq   %rax, -0x8(%rsp)
```

It now generated just:

```
leaq   0xb981c1(%rip), %rax
```

PiperOrigin-RevId: 589152440
diff --git a/src/google/protobuf/port.h b/src/google/protobuf/port.h
index da59316..a5f3b98 100644
--- a/src/google/protobuf/port.h
+++ b/src/google/protobuf/port.h
@@ -38,13 +38,17 @@
 
 namespace internal {
 
-
 template <typename T>
 void StrongPointer(T* var) {
+#if defined(__GNUC__)
+  asm("" : : "r"(var));
+#else
   auto volatile unused = var;
   (void)&unused;  // Use address to avoid an extra load of "unused".
+#endif
 }
 
+
 // See comments on `AllocateAtLeast` for information on size returning new.
 struct SizedPtr {
   void* p;