Index: build/make/excludes/exclude.drlvm_smoke.linux.x86.opt =================================================================== --- build/make/excludes/exclude.drlvm_smoke.linux.x86.opt (revision 547600) +++ build/make/excludes/exclude.drlvm_smoke.linux.x86.opt (working copy) @@ -1,10 +1,6 @@ Check.java PerfCheck.java -# HARMONY-3349 -gc/Finalizer.java -gc/RunFinalizersOnExitTest.java - # breaks on ubuntu 6 w/ OOME stress/Threads.java Index: build/make/excludes/exclude.drlvm_smoke.windows.x86.opt =================================================================== --- build/make/excludes/exclude.drlvm_smoke.windows.x86.opt (revision 547600) +++ build/make/excludes/exclude.drlvm_smoke.windows.x86.opt (working copy) @@ -1,10 +1,6 @@ Check.java PerfCheck.java -# HARMONY-3349 -gc/Finalizer.java -gc/RunFinalizersOnExitTest.java - # HARMONY-2977 io/Integers.java Index: build/make/excludes/exclude.drlvm_smoke.windows.x86_64.opt =================================================================== --- build/make/excludes/exclude.drlvm_smoke.windows.x86_64.opt (revision 547600) +++ build/make/excludes/exclude.drlvm_smoke.windows.x86_64.opt (working copy) @@ -6,10 +6,6 @@ gc/MultiThreads.java perf/MultiThreadsSimple.java -# HARMONY-3349 -gc/Finalizer.java -gc/RunFinalizersOnExitTest.java - # HARMONY-2972 StackTest.java exception/FinalizeStackTest.java Index: build/make/excludes/exclude.drlvm_smoke.linux.x86_64.opt =================================================================== --- build/make/excludes/exclude.drlvm_smoke.linux.x86_64.opt (revision 547600) +++ build/make/excludes/exclude.drlvm_smoke.linux.x86_64.opt (working copy) @@ -6,10 +6,6 @@ gc/MultiThreads.java perf/MultiThreadsSimple.java -# HARMONY-3349 -gc/Finalizer.java -gc/RunFinalizersOnExitTest.java - # HARMONY-2972 StackTest.java exception/FinalizeStackTest.java Index: build/make/excludes/exclude.drlvm_smoke.windows.x86_64.srv =================================================================== --- build/make/excludes/exclude.drlvm_smoke.windows.x86_64.srv (revision 547600) +++ build/make/excludes/exclude.drlvm_smoke.windows.x86_64.srv (working copy) @@ -6,10 +6,6 @@ gc/MultiThreads.java perf/MultiThreadsSimple.java -# HARMONY-3349 -gc/Finalizer.java -gc/RunFinalizersOnExitTest.java - # HARMONY-2972 StackTest.java exception/FinalizeStackTest.java Index: vm/jitrino/src/optimizer/Opcode.cpp =================================================================== --- vm/jitrino/src/optimizer/Opcode.cpp (revision 547600) +++ vm/jitrino/src/optimizer/Opcode.cpp (working copy) @@ -162,7 +162,7 @@ { Op_TauCheckDivOpnds, false, MB::Check, MK::Exception, "chkdivopnds", "chkdivopnds %0,%1 -) %l", }, // for signed divide overflow in CLI (div/rem of MAXNEGINT, -1): generates an ArithmeticException { Op_TauCheckElemType, false, MB::Check, MK::Exception, "chkelemtype", "chkelemtype %0,%1 ((%2,%3)) -) %l", }, // Array element type check for aastore { Op_TauCheckFinite, false, MB::Check, MK::Exception, "ckfinite", "ckfinite %s -) %l", }, // throws ArithmeticException if value is NaN or +- inifinity - { Op_NewObj, false, MB::Exception, MK::None, "newobj", "newobj %d -) %l", }, // OutOfMemoryException + { Op_NewObj, false, MB::Exception, MK::Exception, "newobj", "newobj %d -) %l", }, // OutOfMemoryException { Op_NewArray, false, MB::Exception, MK::Exception, "newarray", "newarray %d[%0] -) %l", }, // OutOfMemoryException, NegativeArraySizeException { Op_NewMultiArray, false, MB::Exception, MK::Exception, "newmultiarray", "newmultiarray %d[%s] -) %l", }, // OutOfMemoryException, NegativeArraySizeException { Op_TauMonitorEnter, true, MB::StoreOrSync, MK::None, "monenter", "monenter %0 ((%1))", }, // (opnd must be non-null) Index: vm/jitrino/src/optimizer/deadcodeeliminator.cpp =================================================================== --- vm/jitrino/src/optimizer/deadcodeeliminator.cpp (revision 547600) +++ vm/jitrino/src/optimizer/deadcodeeliminator.cpp (working copy) @@ -96,9 +96,15 @@ if (operation.isNonEssential()) { return true; } else { - if (inst->getOpcode() == Op_StVar) { + Opcode opCode = inst->getOpcode(); + if (opCode == Op_StVar) { // StVar is non-essential if the variable to which it stores is in SSA form return inst->getDst()->isSsaVarOpnd(); + } else if (opCode == Op_NewObj) { + Type* dstType = inst->getDst()->getType(); + assert(!dstType->isUnresolvedObject()); + // Objects that have finalizers must not be swept + return !dstType->asNamedType()->isFinalizable(); } return false; }