Fix invalid removal of field assignment

Bug: b/445967247
Change-Id: I96c3d18e0b36b71ec95affcf1fe1a95c0594590c
diff --git a/src/main/java/com/android/tools/r8/ir/analysis/fieldaccess/FieldAssignmentTracker.java b/src/main/java/com/android/tools/r8/ir/analysis/fieldaccess/FieldAssignmentTracker.java
index 5fad4d7..773f9c4 100644
--- a/src/main/java/com/android/tools/r8/ir/analysis/fieldaccess/FieldAssignmentTracker.java
+++ b/src/main/java/com/android/tools/r8/ir/analysis/fieldaccess/FieldAssignmentTracker.java
@@ -30,6 +30,8 @@
 import com.android.tools.r8.ir.analysis.value.SingleValue;
 import com.android.tools.r8.ir.analysis.value.UnknownValue;
 import com.android.tools.r8.ir.code.FieldInstruction;
+import com.android.tools.r8.ir.code.InstancePut;
+import com.android.tools.r8.ir.code.Instruction;
 import com.android.tools.r8.ir.code.InvokeDirect;
 import com.android.tools.r8.ir.code.NewInstance;
 import com.android.tools.r8.ir.code.Value;
@@ -319,6 +321,18 @@
               abstractValue = UnknownValue.getInstance();
             }
 
+            // Due to the possibility of constructor inlining we need to check for field puts in the
+            // caller.
+            if (!abstractValue.isUnknown()) {
+              for (InstancePut instancePut :
+                  invoke.getReceiver().<InstancePut>uniqueUsers(Instruction::isInstancePut)) {
+                if (instancePut.getField().isIdenticalTo(field.getReference())) {
+                  abstractValue = AbstractValue.unknown();
+                  break;
+                }
+              }
+            }
+
             assert !abstractValue.isBottom();
             entry.setValue(abstractValue);
             return abstractValue.isUnknown();
diff --git a/src/test/java/com/android/tools/r8/ir/optimize/membervaluepropagation/B445967247Test.java b/src/test/java/com/android/tools/r8/ir/optimize/membervaluepropagation/B445967247Test.java
index 48708a3..bdfb4c2 100644
--- a/src/test/java/com/android/tools/r8/ir/optimize/membervaluepropagation/B445967247Test.java
+++ b/src/test/java/com/android/tools/r8/ir/optimize/membervaluepropagation/B445967247Test.java
@@ -41,8 +41,7 @@
         .addKeepClassAndMembersRules(Main.class)
         .enableInliningAnnotations()
         .run(parameters.getRuntime(), Main.class)
-        // TODO(b/445967247): Fixme.
-        .assertSuccessWithOutputLines("[]");
+        .assertSuccessWithOutputLines("[Hello, world!]");
   }
 
   static class Main {