diff -r dbbf44db0107 -r 4da76e32c0be src/share/vm/opto/memnode.cpp --- a/src/share/vm/opto/memnode.cpp Tue Nov 30 23:14:25 2010 -0800 +++ b/src/share/vm/opto/memnode.cpp Wed Dec 01 10:16:31 2010 -0800 @@ -3599,10 +3599,12 @@ intptr_t size_limit = phase->find_intptr_t_con(size_in_bytes, max_jint); if (zeroes_done + BytesPerLong >= size_limit) { assert(allocation() != NULL, ""); - Node* klass_node = allocation()->in(AllocateNode::KlassNode); - ciKlass* k = phase->type(klass_node)->is_klassptr()->klass(); - if (zeroes_done == k->layout_helper()) - zeroes_done = size_limit; + if (allocation()->Opcode() == Op_Allocate) { + Node* klass_node = allocation()->in(AllocateNode::KlassNode); + ciKlass* k = phase->type(klass_node)->is_klassptr()->klass(); + if (zeroes_done == k->layout_helper()) + zeroes_done = size_limit; + } } if (zeroes_done < size_limit) { rawmem = ClearArrayNode::clear_memory(rawctl, rawmem, rawptr,