diff --git a/mercurial/pure/parsers.py b/mercurial/pure/parsers.py
--- a/mercurial/pure/parsers.py
+++ b/mercurial/pure/parsers.py
@@ -162,7 +162,7 @@ class DirstateItem(object):
         is not expected to change, unlike the __init__ one.
         """
         if state == b'm':
-            return cls.new_merged()
+            return cls(wc_tracked=True, p1_tracked=True, p2_info=True)
         elif state == b'a':
             return cls.new_added()
         elif state == b'r':
diff --git a/rust/hg-core/src/dirstate/entry.rs b/rust/hg-core/src/dirstate/entry.rs
--- a/rust/hg-core/src/dirstate/entry.rs
+++ b/rust/hg-core/src/dirstate/entry.rs
@@ -94,7 +94,13 @@ impl DirstateEntry {
                 mode_size: None,
                 mtime: None,
             },
-            EntryState::Merged => Self::new_merged(),
+            EntryState::Merged => Self {
+                flags: Flags::WDIR_TRACKED
+                    | Flags::P1_TRACKED // might not be true because of rename ?
+                    | Flags::P2_INFO, // might not be true because of rename ?
+                mode_size: None,
+                mtime: None,
+            },
         }
     }