Revert "The meet of precise types is only defined for identical types."
This reverts commit 4065e24925f6fe68945348db8b6d3b79761ebbca.
Reason for revert: Causes golem tests to fail due to uninitialized local variables issue: b/111429335
Bug: 111429335
Change-Id: I944a937d45fe49edaba4f497b0af61d9779a5509
diff --git a/src/main/java/com/android/tools/r8/ir/code/ValueType.java b/src/main/java/com/android/tools/r8/ir/code/ValueType.java
index 69618b3..c414342 100644
--- a/src/main/java/com/android/tools/r8/ir/code/ValueType.java
+++ b/src/main/java/com/android/tools/r8/ir/code/ValueType.java
@@ -48,10 +48,6 @@
if (other == INT_OR_FLOAT_OR_NULL) {
return other.meet(this);
}
- if (isPreciseType() && other.isPreciseType()) {
- // Precise types must be identical, hitting the first check above.
- throw new CompilationError("Cannot compute meet of types: " + this + " and " + other);
- }
switch (this) {
case OBJECT:
{
diff --git a/src/test/java/com/android/tools/r8/R8RunSmaliTestsTest.java b/src/test/java/com/android/tools/r8/R8RunSmaliTestsTest.java
index 11ad12b..0f3cadc 100644
--- a/src/test/java/com/android/tools/r8/R8RunSmaliTestsTest.java
+++ b/src/test/java/com/android/tools/r8/R8RunSmaliTestsTest.java
@@ -11,14 +11,12 @@
import com.android.tools.r8.utils.TestDescriptionWatcher;
import com.google.common.collect.ImmutableList;
import com.google.common.collect.ImmutableMap;
-import com.google.common.collect.ImmutableSet;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.Arrays;
import java.util.Collection;
import java.util.List;
import java.util.Map;
-import java.util.Set;
import org.junit.Rule;
import org.junit.Test;
import org.junit.rules.ExpectedException;
@@ -91,11 +89,6 @@
// This list is currently empty!
);
- private Set<String> failingOnX8 = ImmutableSet.of(
- // Contains use of register as both an int and a float.
- "regression/33336471"
- );
-
@Rule
public TemporaryFolder temp = ToolHelper.getTemporaryFolderForTest();
@@ -168,10 +161,6 @@
.addLibraryFiles(ToolHelper.getDefaultAndroidJar())
.setOutput(Paths.get(outputPath), OutputMode.DexIndexed);
ToolHelper.getAppBuilder(builder).addProgramFiles(originalDexFile);
-
- if (failingOnX8.contains(directoryName)) {
- thrown.expect(CompilationFailedException.class);
- }
R8.run(builder.build());
if (!ToolHelper.artSupported()) {
diff --git a/src/test/java/com/android/tools/r8/smali/RemoveWriteOfUnusedFieldsTest.java b/src/test/java/com/android/tools/r8/smali/RemoveWriteOfUnusedFieldsTest.java
index 86c4242..5270cd4 100644
--- a/src/test/java/com/android/tools/r8/smali/RemoveWriteOfUnusedFieldsTest.java
+++ b/src/test/java/com/android/tools/r8/smali/RemoveWriteOfUnusedFieldsTest.java
@@ -8,6 +8,7 @@
import com.android.tools.r8.OutputMode;
import com.android.tools.r8.ToolHelper;
+import com.android.tools.r8.ToolHelper.DexVm;
import com.android.tools.r8.graph.DexCode;
import com.android.tools.r8.origin.Origin;
import com.android.tools.r8.utils.AndroidApp;
@@ -36,23 +37,28 @@
builder.addStaticField("stringField", "Ljava/lang/String;");
builder.addStaticField("testField", "LTest;");
+ boolean isDalvik = ToolHelper.getDexVm().isOlderThanOrEqual(DexVm.ART_4_4_4_HOST);
+ String additionalConstZero = isDalvik ? "const v0, 0" : "";
+ String additionalConstZeroWide = isDalvik ? "const-wide v0, 0" : "";
+
builder.addStaticMethod("void", "test", ImmutableList.of(),
2,
- "const v0, 0", // single non-float typed zero (ie, int type)
+ "const v0, 0",
"sput-boolean v0, LTest;->booleanField:Z",
"sput-byte v0, LTest;->byteField:B",
- "sput-char v0, LTest;->charField:C",
"sput-short v0, LTest;->shortField:S",
"sput v0, LTest;->intField:I",
- "const v0, 0", // float typed zero
+ // Dalvik 4.x. does not require a new const 0 here.
"sput v0, LTest;->floatField:F",
- "const v0, 0", // reference typed null
+ additionalConstZero, // Required for Dalvik 4.x.
+ "sput-char v0, LTest;->charField:C",
+ "const v0, 0",
"sput-object v0, LTest;->objectField:Ljava/lang/Object;",
"sput-object v0, LTest;->stringField:Ljava/lang/String;",
"sput-object v0, LTest;->testField:LTest;",
- "const-wide v0, 0", // wide typed long
+ "const-wide v0, 0",
"sput-wide v0, LTest;->longField:J",
- "const-wide v0, 0", // wide typed double
+ additionalConstZeroWide, // Required for Dalvik 4.x.
"sput-wide v0, LTest;->doubleField:D",
"return-void");
@@ -97,23 +103,28 @@
builder.addInstanceField("stringField", "Ljava/lang/String;");
builder.addInstanceField("testField", "LTest;");
+ boolean isDalvik = ToolHelper.getDexVm().isOlderThanOrEqual(DexVm.ART_4_4_4_HOST);
+ String additionalConstZero = isDalvik ? "const v0, 0" : "";
+ String additionalConstZeroWide = isDalvik ? "const-wide v0, 0" : "";
+
builder.addInstanceMethod("void", "test", ImmutableList.of(),
2,
"const v0, 0",
"iput-boolean v0, p0, LTest;->booleanField:Z",
"iput-byte v0, p0, LTest;->byteField:B",
- "iput-char v0, p0, LTest;->charField:C",
"iput-short v0, p0, LTest;->shortField:S",
"iput v0, p0, LTest;->intField:I",
- "const v0, 0",
+ // Dalvik 4.x. does not require a new const 0 here.
"iput v0, p0, LTest;->floatField:F",
+ additionalConstZero, // Required for Dalvik 4.x.
+ "iput-char v0, p0, LTest;->charField:C",
"const v0, 0",
"iput-object v0, p0, LTest;->objectField:Ljava/lang/Object;",
"iput-object v0, p0, LTest;->stringField:Ljava/lang/String;",
"iput-object v0, p0, LTest;->testField:LTest;",
"const-wide v0, 0",
"iput-wide v0, p0, LTest;->longField:J",
- "const-wide v0, 0",
+ additionalConstZeroWide, // Required for Dalvik 4.x.
"iput-wide v0, p0, LTest;->doubleField:D",
"return-void");