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;