diff --git a/encoding/protojson/decode.go b/encoding/protojson/decode.go
index 8f9e592..cffdfda 100644
--- a/encoding/protojson/decode.go
+++ b/encoding/protojson/decode.go
@@ -192,7 +192,7 @@
 				fd = fieldDescs.ByTextName(name)
 			}
 		}
-		if flags.ProtoLegacy {
+		if flags.ProtoLegacyWeak {
 			if fd != nil && fd.IsWeak() && fd.Message().IsPlaceholder() {
 				fd = nil // reset since the weak reference is not linked in
 			}
diff --git a/encoding/protojson/decode_test.go b/encoding/protojson/decode_test.go
index 053d269..d74593d 100644
--- a/encoding/protojson/decode_test.go
+++ b/encoding/protojson/decode_test.go
@@ -2684,13 +2684,13 @@
 			m.SetWeakMessage1(&weakpb.WeakImportMessage1{A: proto.Int32(1)})
 			return m
 		}(),
-		skip: !flags.ProtoLegacy,
+		skip: !flags.ProtoLegacyWeak,
 	}, {
 		desc:         "weak fields; unknown field",
 		inputMessage: &testpb.TestWeak{},
 		inputText:    `{"weak_message1":{"a":1}, "weak_message2":{"a":1}}`,
 		wantErr:      `unknown field "weak_message2"`, // weak_message2 is unknown since the package containing it is not imported
-		skip:         !flags.ProtoLegacy,
+		skip:         !flags.ProtoLegacyWeak,
 	}, {
 		desc:         "just at recursion limit: nested messages",
 		inputMessage: &testpb.TestAllTypes{},
diff --git a/encoding/prototext/decode.go b/encoding/prototext/decode.go
index 24bc98a..d972a3d 100644
--- a/encoding/prototext/decode.go
+++ b/encoding/prototext/decode.go
@@ -185,7 +185,7 @@
 		} else if xtErr != nil && xtErr != protoregistry.NotFound {
 			return d.newError(tok.Pos(), "unable to resolve [%s]: %v", tok.RawString(), xtErr)
 		}
-		if flags.ProtoLegacy {
+		if flags.ProtoLegacyWeak {
 			if fd != nil && fd.IsWeak() && fd.Message().IsPlaceholder() {
 				fd = nil // reset since the weak reference is not linked in
 			}
diff --git a/encoding/prototext/decode_test.go b/encoding/prototext/decode_test.go
index a0be9ce..9ccfdc4 100644
--- a/encoding/prototext/decode_test.go
+++ b/encoding/prototext/decode_test.go
@@ -1625,13 +1625,13 @@
 			m.SetWeakMessage1(&weakpb.WeakImportMessage1{A: proto.Int32(1)})
 			return m
 		}(),
-		skip: !flags.ProtoLegacy,
+		skip: !flags.ProtoLegacyWeak,
 	}, {
 		desc:         "weak fields; unknown field",
 		inputMessage: &testpb.TestWeak{},
 		inputText:    `weak_message1:{a:1} weak_message2:{a:1}`,
 		wantErr:      "unknown field: weak_message2", // weak_message2 is unknown since the package containing it is not imported
-		skip:         !flags.ProtoLegacy,
+		skip:         !flags.ProtoLegacyWeak,
 	}}
 
 	for _, msg := range makeMessages(protobuild.Message{},
diff --git a/internal/flags/flags.go b/internal/flags/flags.go
index 58372dd..5cb3ee7 100644
--- a/internal/flags/flags.go
+++ b/internal/flags/flags.go
@@ -22,3 +22,8 @@
 // extension fields at unmarshal time, but defers creating the message
 // structure until the extension is first accessed.
 const LazyUnmarshalExtensions = ProtoLegacy
+
+// ProtoLegacyWeak specifies whether to enable support for weak fields.
+// This flag was split out of ProtoLegacy in preparation for removing
+// support for weak fields (independent of the other protolegacy features).
+const ProtoLegacyWeak = ProtoLegacy
diff --git a/internal/impl/message_reflect_field.go b/internal/impl/message_reflect_field.go
index 9efecd4..3cd1fbc 100644
--- a/internal/impl/message_reflect_field.go
+++ b/internal/impl/message_reflect_field.go
@@ -333,7 +333,7 @@
 }
 
 func fieldInfoForWeakMessage(fd protoreflect.FieldDescriptor, weakOffset offset) fieldInfo {
-	if !flags.ProtoLegacy {
+	if !flags.ProtoLegacyWeak {
 		panic("no support for proto1 weak fields")
 	}
 
diff --git a/proto/checkinit_test.go b/proto/checkinit_test.go
index 56cccd9..848f78b 100644
--- a/proto/checkinit_test.go
+++ b/proto/checkinit_test.go
@@ -73,7 +73,7 @@
 	}, {
 		m:    &testpb.TestWeak{},
 		want: `<nil>`,
-		skip: !flags.ProtoLegacy,
+		skip: !flags.ProtoLegacyWeak,
 	}, {
 		m: func() proto.Message {
 			m := &testpb.TestWeak{}
@@ -81,7 +81,7 @@
 			return m
 		}(),
 		want: `goproto.proto.test.weak.WeakImportMessage1.a`,
-		skip: !flags.ProtoLegacy,
+		skip: !flags.ProtoLegacyWeak,
 	}, {
 		m: func() proto.Message {
 			m := &testpb.TestWeak{}
@@ -91,7 +91,7 @@
 			return m
 		}(),
 		want: `<nil>`,
-		skip: !flags.ProtoLegacy,
+		skip: !flags.ProtoLegacyWeak,
 	}}
 
 	for _, tt := range tests {
diff --git a/proto/decode.go b/proto/decode.go
index a3b5e14..e28d7ac 100644
--- a/proto/decode.go
+++ b/proto/decode.go
@@ -172,7 +172,7 @@
 		var err error
 		if fd == nil {
 			err = errUnknown
-		} else if flags.ProtoLegacy {
+		} else if flags.ProtoLegacyWeak {
 			if fd.IsWeak() && fd.Message().IsPlaceholder() {
 				err = errUnknown // weak referent is not linked in
 			}
diff --git a/proto/weak_test.go b/proto/weak_test.go
index 79340e3..c777a4a 100644
--- a/proto/weak_test.go
+++ b/proto/weak_test.go
@@ -17,7 +17,7 @@
 )
 
 func init() {
-	if flags.ProtoLegacy {
+	if flags.ProtoLegacyWeak {
 		testValidMessages = append(testValidMessages, testWeakValidMessages...)
 		testInvalidMessages = append(testInvalidMessages, testWeakInvalidMessages...)
 		testMerges = append(testMerges, testWeakMerges...)
@@ -29,7 +29,7 @@
 		desc: "weak message",
 		decodeTo: []proto.Message{
 			func() proto.Message {
-				if !flags.ProtoLegacy {
+				if !flags.ProtoLegacyWeak {
 					return nil
 				}
 				m := &testpb.TestWeak{}
@@ -98,7 +98,7 @@
 }
 
 func TestWeakNil(t *testing.T) {
-	if !flags.ProtoLegacy {
+	if !flags.ProtoLegacyWeak {
 		t.SkipNow()
 	}
 
@@ -109,7 +109,7 @@
 }
 
 func TestWeakMarshalNil(t *testing.T) {
-	if !flags.ProtoLegacy {
+	if !flags.ProtoLegacyWeak {
 		t.SkipNow()
 	}
 
diff --git a/reflect/protodesc/desc_validate.go b/reflect/protodesc/desc_validate.go
index 6de31c2..5eaf652 100644
--- a/reflect/protodesc/desc_validate.go
+++ b/reflect/protodesc/desc_validate.go
@@ -149,7 +149,7 @@
 					return errors.New("message field %q under proto3 optional semantics must be within a single element oneof", f.FullName())
 				}
 			}
-			if f.IsWeak() && !flags.ProtoLegacy {
+			if f.IsWeak() && !flags.ProtoLegacyWeak {
 				return errors.New("message field %q is a weak field, which is a legacy proto1 feature that is no longer supported", f.FullName())
 			}
 			if f.IsWeak() && (!f.HasPresence() || !isOptionalMessage(f) || f.ContainingOneof() != nil) {
diff --git a/testing/prototest/prototest_test.go b/testing/prototest/prototest_test.go
index 40df84c..6515c65 100644
--- a/testing/prototest/prototest_test.go
+++ b/testing/prototest/prototest_test.go
@@ -36,7 +36,7 @@
 		(*legacypb.Legacy)(nil),
 		protoimpl.X.MessageOf((*legacy1pb.Message)(nil)).Interface(),
 	}
-	if flags.ProtoLegacy {
+	if flags.ProtoLegacyWeak {
 		ms = append(ms, (*testpb.TestWeak)(nil))
 	}
 
