internal/impl: fix reversed IsValid test

Change-Id: Iaf5291a6bf31ad3dd130fca06840cec66b896f59
Reviewed-on: https://go-review.googlesource.com/c/protobuf/+/211558
Reviewed-by: Joe Tsai <joetsai@google.com>
diff --git a/internal/cmd/generate-types/impl.go b/internal/cmd/generate-types/impl.go
index 401eba8..700ae27 100644
--- a/internal/cmd/generate-types/impl.go
+++ b/internal/cmd/generate-types/impl.go
@@ -741,7 +741,7 @@
 	m.messageInfo().setUnknown(m.pointer(), b)
 }
 func (m *{{.}}) IsValid() bool {
-	return m.pointer().IsNil()
+	return !m.pointer().IsNil()
 }
 
 {{end}}
diff --git a/internal/impl/message_reflect_gen.go b/internal/impl/message_reflect_gen.go
index e894659..94bc88c 100644
--- a/internal/impl/message_reflect_gen.go
+++ b/internal/impl/message_reflect_gen.go
@@ -125,7 +125,7 @@
 	m.messageInfo().setUnknown(m.pointer(), b)
 }
 func (m *messageState) IsValid() bool {
-	return m.pointer().IsNil()
+	return !m.pointer().IsNil()
 }
 
 func (m *messageReflectWrapper) Descriptor() protoreflect.MessageDescriptor {
@@ -245,5 +245,5 @@
 	m.messageInfo().setUnknown(m.pointer(), b)
 }
 func (m *messageReflectWrapper) IsValid() bool {
-	return m.pointer().IsNil()
+	return !m.pointer().IsNil()
 }
diff --git a/internal/impl/message_reflect_test.go b/internal/impl/message_reflect_test.go
index 82d5f81..bb6bda5 100644
--- a/internal/impl/message_reflect_test.go
+++ b/internal/impl/message_reflect_test.go
@@ -1437,6 +1437,17 @@
 	m.Descriptor()
 }
 
+func TestIsValid(t *testing.T) {
+	var m *testpb.TestAllTypes
+	if got, want := m.ProtoReflect().IsValid(), false; got != want {
+		t.Errorf("((*M)(nil)).ProtoReflect().IsValid() = %v, want %v", got, want)
+	}
+	m = &testpb.TestAllTypes{}
+	if got, want := m.ProtoReflect().IsValid(), true; got != want {
+		t.Errorf("(&M{}).ProtoReflect().IsValid() = %v, want %v", got, want)
+	}
+}
+
 // The MessageState implementation makes the assumption that when a
 // concrete message is unsafe casted as a *MessageState, the Go GC does
 // not reclaim the memory for the remainder of the concrete message.