Fix concurrency error in staticizer
Change-Id: I135731dccd6bf1794e4fd4213d52a3d9ce088cd2
Bug: 157028320
diff --git a/src/main/java/com/android/tools/r8/ir/optimize/staticizer/ClassStaticizer.java b/src/main/java/com/android/tools/r8/ir/optimize/staticizer/ClassStaticizer.java
index 499c975..323dd11 100644
--- a/src/main/java/com/android/tools/r8/ir/optimize/staticizer/ClassStaticizer.java
+++ b/src/main/java/com/android/tools/r8/ir/optimize/staticizer/ClassStaticizer.java
@@ -40,7 +40,6 @@
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
-import java.util.IdentityHashMap;
import java.util.List;
import java.util.ListIterator;
import java.util.Map;
@@ -103,7 +102,7 @@
}
final Map<CandidateInfo, LongLivedProgramMethodSetBuilder<?>> referencedFrom =
- new IdentityHashMap<>();
+ new ConcurrentHashMap<>();
// The map storing all the potential candidates for staticizing.
final ConcurrentHashMap<DexType, CandidateInfo> candidates = new ConcurrentHashMap<>();
diff --git a/src/main/java/com/android/tools/r8/ir/optimize/staticizer/StaticizingProcessor.java b/src/main/java/com/android/tools/r8/ir/optimize/staticizer/StaticizingProcessor.java
index ac915a5..0e0e1c9 100644
--- a/src/main/java/com/android/tools/r8/ir/optimize/staticizer/StaticizingProcessor.java
+++ b/src/main/java/com/android/tools/r8/ir/optimize/staticizer/StaticizingProcessor.java
@@ -43,6 +43,7 @@
import com.android.tools.r8.utils.SetUtils;
import com.android.tools.r8.utils.Timing;
import com.android.tools.r8.utils.TraversalContinuation;
+import com.android.tools.r8.utils.collections.LongLivedProgramMethodSetBuilder;
import com.android.tools.r8.utils.collections.ProgramMethodSet;
import com.android.tools.r8.utils.collections.SortedProgramMethodSet;
import com.google.common.collect.BiMap;
@@ -228,7 +229,10 @@
ProgramMethodSet referencedFrom;
if (classStaticizer.referencedFrom.containsKey(info)) {
- referencedFrom = classStaticizer.referencedFrom.remove(info).build(appView);
+ LongLivedProgramMethodSetBuilder<?> referencedFromBuilder =
+ classStaticizer.referencedFrom.remove(info);
+ assert referencedFromBuilder != null;
+ referencedFrom = referencedFromBuilder.build(appView);
materializedReferencedFromCollections.put(info, referencedFrom);
} else {
referencedFrom = ProgramMethodSet.empty();