internal/impl: fix non-atomic access of MessageState.mi

MessageState's mi field must only be accessed via atomic operations.
Rename the field to 'atomicMessageInfo' to make it incorrect access
obvious. Fix one incorrect non-atomic access.

Change-Id: If80343fb1b82186416f007ca5b340a4926b1cd3c
Reviewed-on: https://go-review.googlesource.com/c/protobuf/+/221419
Reviewed-by: Joe Tsai <joetsai@google.com>
diff --git a/internal/impl/message.go b/internal/impl/message.go
index 4d18b96..65de48a 100644
--- a/internal/impl/message.go
+++ b/internal/impl/message.go
@@ -100,9 +100,9 @@
 func (mi *MessageInfo) getPointer(m pref.Message) (p pointer, ok bool) {
 	switch m := m.(type) {
 	case *messageState:
-		return m.pointer(), m.mi == mi
+		return m.pointer(), m.messageInfo() == mi
 	case *messageReflectWrapper:
-		return m.pointer(), m.mi == mi
+		return m.pointer(), m.messageInfo() == mi
 	}
 	return pointer{}, false
 }
diff --git a/internal/impl/message_reflect.go b/internal/impl/message_reflect.go
index f5f7f2b..aac55ee 100644
--- a/internal/impl/message_reflect.go
+++ b/internal/impl/message_reflect.go
@@ -256,7 +256,7 @@
 	pragma.DoNotCompare
 	pragma.DoNotCopy
 
-	mi *MessageInfo
+	atomicMessageInfo *MessageInfo
 }
 
 type messageState MessageState
diff --git a/internal/impl/pointer_unsafe.go b/internal/impl/pointer_unsafe.go
index 201fc2b..2741643 100644
--- a/internal/impl/pointer_unsafe.go
+++ b/internal/impl/pointer_unsafe.go
@@ -151,10 +151,10 @@
 	return ms.LoadMessageInfo()
 }
 func (ms *messageState) LoadMessageInfo() *MessageInfo {
-	return (*MessageInfo)(atomic.LoadPointer((*unsafe.Pointer)(unsafe.Pointer(&ms.mi))))
+	return (*MessageInfo)(atomic.LoadPointer((*unsafe.Pointer)(unsafe.Pointer(&ms.atomicMessageInfo))))
 }
 func (ms *messageState) StoreMessageInfo(mi *MessageInfo) {
-	atomic.StorePointer((*unsafe.Pointer)(unsafe.Pointer(&ms.mi)), unsafe.Pointer(mi))
+	atomic.StorePointer((*unsafe.Pointer)(unsafe.Pointer(&ms.atomicMessageInfo)), unsafe.Pointer(mi))
 }
 
 type atomicNilMessage struct{ p unsafe.Pointer } // p is a *messageReflectWrapper