Mercurial > hg > graal-compiler
diff src/share/vm/classfile/defaultMethods.cpp @ 7613:2dce7c34c564
8006513: Null pointer in DefaultMethods::generate_default_methods when merging annotations
Reviewed-by: brutisso, jfranck
author | stefank |
---|---|
date | Thu, 17 Jan 2013 11:39:48 +0100 |
parents | ade95d680b42 |
children | 927a311d00f9 |
line wrap: on
line diff
--- a/src/share/vm/classfile/defaultMethods.cpp Tue Jan 15 12:32:26 2013 -0800 +++ b/src/share/vm/classfile/defaultMethods.cpp Thu Jan 17 11:39:48 2013 +0100 @@ -1285,13 +1285,15 @@ enum { ANNOTATIONS, PARAMETERS, DEFAULTS, NUM_ARRAYS }; - Array<AnnotationArray*>* original_annots[NUM_ARRAYS]; + Array<AnnotationArray*>* original_annots[NUM_ARRAYS] = { NULL }; Array<Method*>* original_methods = klass->methods(); Annotations* annots = klass->annotations(); - original_annots[ANNOTATIONS] = annots->methods_annotations(); - original_annots[PARAMETERS] = annots->methods_parameter_annotations(); - original_annots[DEFAULTS] = annots->methods_default_annotations(); + if (annots != NULL) { + original_annots[ANNOTATIONS] = annots->methods_annotations(); + original_annots[PARAMETERS] = annots->methods_parameter_annotations(); + original_annots[DEFAULTS] = annots->methods_default_annotations(); + } Array<int>* original_ordering = klass->method_ordering(); Array<int>* merged_ordering = Universe::the_empty_int_array(); @@ -1370,9 +1372,15 @@ // Replace klass methods with new merged lists klass->set_methods(merged_methods); - annots->set_methods_annotations(merged_annots[ANNOTATIONS]); - annots->set_methods_parameter_annotations(merged_annots[PARAMETERS]); - annots->set_methods_default_annotations(merged_annots[DEFAULTS]); + if (annots != NULL) { + annots->set_methods_annotations(merged_annots[ANNOTATIONS]); + annots->set_methods_parameter_annotations(merged_annots[PARAMETERS]); + annots->set_methods_default_annotations(merged_annots[DEFAULTS]); + } else { + assert(merged_annots[ANNOTATIONS] == NULL, "Must be"); + assert(merged_annots[PARAMETERS] == NULL, "Must be"); + assert(merged_annots[DEFAULTS] == NULL, "Must be"); + } ClassLoaderData* cld = klass->class_loader_data(); MetadataFactory::free_array(cld, original_methods);