langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/jvm/Gen.java
changeset 29777 95a89a2efd89
parent 29295 5a367770a074
child 29842 826ac2519523
--- a/langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/jvm/Gen.java	Mon Mar 30 17:09:14 2015 +0530
+++ b/langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/jvm/Gen.java	Mon Mar 23 09:48:37 2015 +0530
@@ -1860,6 +1860,13 @@
     public void visitAssign(JCAssign tree) {
         Item l = genExpr(tree.lhs, tree.lhs.type);
         genExpr(tree.rhs, tree.lhs.type).load();
+        if (tree.rhs.type.hasTag(BOT)) {
+            /* This is just a case of widening reference conversion that per 5.1.5 simply calls
+               for "regarding a reference as having some other type in a manner that can be proved
+               correct at compile time."
+            */
+            code.state.forceStackTop(tree.lhs.type);
+        }
         result = items.makeAssignItem(l);
     }
 
@@ -2272,12 +2279,7 @@
     public void visitLiteral(JCLiteral tree) {
         if (tree.type.hasTag(BOT)) {
             code.emitop0(aconst_null);
-            if (types.dimensions(pt) > 1) {
-                code.emitop2(checkcast, makeRef(tree.pos(), pt));
-                result = items.makeStackItem(pt);
-            } else {
-                result = items.makeStackItem(tree.type);
-            }
+            result = items.makeStackItem(tree.type);
         }
         else
             result = items.makeImmediateItem(tree.type, tree.value);