summaryrefslogtreecommitdiffstats
path: root/jack
diff options
context:
space:
mode:
authormikaelpeltier <mikaelpeltier@google.com>2015-05-19 17:52:55 +0200
committerMikael Peltier <mikaelpeltier@google.com>2015-05-21 11:43:04 +0000
commit6f8866b42820efb83640abaae45c5f9dacb943c7 (patch)
treefadc0232d0d5555a1efcbbf0affd17d0b1317edb /jack
parent2a9ba9420757bba501858d56eada436716fb0d41 (diff)
downloadtoolchain_jack-6f8866b42820efb83640abaae45c5f9dacb943c7.zip
toolchain_jack-6f8866b42820efb83640abaae45c5f9dacb943c7.tar.gz
toolchain_jack-6f8866b42820efb83640abaae45c5f9dacb943c7.tar.bz2
Do not remove type of 'null' expression otherwise type is lost
Bug: 19508222 Change-Id: I839ee69b454bf74dd93a6dffcb900c56fb68c3de (cherry picked from commit 731bf4c954500229d95fdacf424f7ccad6e5bdcf)
Diffstat (limited to 'jack')
-rw-r--r--jack/src/com/android/jack/transformations/cast/UselessCastRemover.java14
-rw-r--r--jack/tests/com/android/jack/transformations/cast/UselessCastRemoverTest.java2
2 files changed, 11 insertions, 5 deletions
diff --git a/jack/src/com/android/jack/transformations/cast/UselessCastRemover.java b/jack/src/com/android/jack/transformations/cast/UselessCastRemover.java
index f50fc1f..42e9c4e 100644
--- a/jack/src/com/android/jack/transformations/cast/UselessCastRemover.java
+++ b/jack/src/com/android/jack/transformations/cast/UselessCastRemover.java
@@ -19,7 +19,9 @@ package com.android.jack.transformations.cast;
import com.android.jack.Options;
import com.android.jack.ir.ast.JCastOperation;
import com.android.jack.ir.ast.JDynamicCastOperation;
+import com.android.jack.ir.ast.JExpression;
import com.android.jack.ir.ast.JMethod;
+import com.android.jack.ir.ast.JNullLiteral;
import com.android.jack.ir.ast.JReferenceType;
import com.android.jack.ir.ast.JType;
import com.android.jack.ir.ast.JVisitor;
@@ -57,10 +59,14 @@ public class UselessCastRemover implements RunnableSchedulable<JMethod> {
@Override
public void endVisit(@Nonnull JCastOperation cast) {
JType destType = cast.getCastType();
- JType srcType = cast.getExpr().getType();
- if (srcType instanceof JReferenceType && destType instanceof JReferenceType) {
- if (((JReferenceType) srcType).canBeSafelyUpcast((JReferenceType) destType)) {
- request.append(new Replace(cast, cast.getExpr()));
+ JExpression castedExpr = cast.getExpr();
+ JType srcType = castedExpr.getType();
+ // Do not remove cast of 'null' expression otherwise type is lost
+ if (!(castedExpr instanceof JNullLiteral)) {
+ if (srcType instanceof JReferenceType && destType instanceof JReferenceType) {
+ if (((JReferenceType) srcType).canBeSafelyUpcast((JReferenceType) destType)) {
+ request.append(new Replace(cast, castedExpr));
+ }
}
}
super.endVisit(cast);
diff --git a/jack/tests/com/android/jack/transformations/cast/UselessCastRemoverTest.java b/jack/tests/com/android/jack/transformations/cast/UselessCastRemoverTest.java
index 62d9540..da5db0c 100644
--- a/jack/tests/com/android/jack/transformations/cast/UselessCastRemoverTest.java
+++ b/jack/tests/com/android/jack/transformations/cast/UselessCastRemoverTest.java
@@ -85,7 +85,7 @@ public class UselessCastRemoverTest {
public void castNullToString() throws Exception {
final String methodSignature = "castNullToString()Ljava/lang/String;";
- buildMethodAndCheckUselessCastRemover(CAST, methodSignature, true);
+ buildMethodAndCheckUselessCastRemover(CAST, methodSignature, false);
}
@Test