Fix class inliner error when singleton instance flows to static invoke

Bug: 160942326
Change-Id: If7ee1996c00f914c49e914fd3917c73ab48fedbb
diff --git a/src/main/java/com/android/tools/r8/ir/optimize/classinliner/InlineCandidateProcessor.java b/src/main/java/com/android/tools/r8/ir/optimize/classinliner/InlineCandidateProcessor.java
index 3824962..acd7477 100644
--- a/src/main/java/com/android/tools/r8/ir/optimize/classinliner/InlineCandidateProcessor.java
+++ b/src/main/java/com/android/tools/r8/ir/optimize/classinliner/InlineCandidateProcessor.java
@@ -1222,8 +1222,9 @@
 
     if (root.isStaticGet()) {
       // If we are class inlining a singleton instance from a static-get, then we don't know
-      // the value of the fields.
-      if (parameterUsage.hasFieldRead) {
+      // the value of the fields, and we also can't optimize away instance-field assignments, as
+      // they have global side effects.
+      if (parameterUsage.hasFieldAssignment || parameterUsage.hasFieldRead) {
         return false;
       }
     }
diff --git a/src/test/java/com/android/tools/r8/ir/optimize/classinliner/StatefulSingletonClassInliningWithStaticEscapeTest.java b/src/test/java/com/android/tools/r8/ir/optimize/classinliner/StatefulSingletonClassInliningWithStaticEscapeTest.java
index c87e0b0..681f958 100644
--- a/src/test/java/com/android/tools/r8/ir/optimize/classinliner/StatefulSingletonClassInliningWithStaticEscapeTest.java
+++ b/src/test/java/com/android/tools/r8/ir/optimize/classinliner/StatefulSingletonClassInliningWithStaticEscapeTest.java
@@ -4,9 +4,7 @@
 
 package com.android.tools.r8.ir.optimize.classinliner;
 
-import static org.junit.Assert.fail;
 
-import com.android.tools.r8.CompilationFailedException;
 import com.android.tools.r8.NeverInline;
 import com.android.tools.r8.TestBase;
 import com.android.tools.r8.TestParameters;
@@ -31,17 +29,14 @@
 
   @Test
   public void test() throws Exception {
-    try {
-      testForR8(parameters.getBackend())
-          .addInnerClasses(StatefulSingletonClassInliningWithStaticEscapeTest.class)
-          .addKeepMainRule(TestClass.class)
-          .enableInliningAnnotations()
-          .setMinApi(parameters.getApiLevel())
-          .compile();
-      fail();
-    } catch (CompilationFailedException e) {
-      // TODO(b/160942326): Fix class inliner.
-    }
+    testForR8(parameters.getBackend())
+        .addInnerClasses(StatefulSingletonClassInliningWithStaticEscapeTest.class)
+        .addKeepMainRule(TestClass.class)
+        .enableInliningAnnotations()
+        .setMinApi(parameters.getApiLevel())
+        .compile()
+        .run(parameters.getRuntime(), TestClass.class)
+        .assertSuccessWithOutputLines("true");
   }
 
   static class TestClass {