Mercurial > hg > graal-compiler
changeset 7604:f1de9dbc914e
8006109: test/java/util/AbstractSequentialList/AddAll.java fails: assert(rtype == ctype) failed: mismatched return types
Reviewed-by: kvn
author | twisti |
---|---|
date | Tue, 15 Jan 2013 12:06:18 -0800 |
parents | d92fa52a5d03 |
children | 5b8548391bf3 |
files | src/share/vm/ci/ciType.cpp src/share/vm/ci/ciType.hpp src/share/vm/opto/doCall.cpp |
diffstat | 3 files changed, 23 insertions(+), 2 deletions(-) [+] |
line wrap: on
line diff
--- a/src/share/vm/ci/ciType.cpp Mon Jan 14 08:22:32 2013 -0800 +++ b/src/share/vm/ci/ciType.cpp Tue Jan 15 12:06:18 2013 -0800 @@ -60,6 +60,19 @@ } // ------------------------------------------------------------------ +// ciType::name +// +// Return the name of this type +const char* ciType::name() { + if (is_primitive_type()) { + return type2name(basic_type()); + } else { + assert(is_klass(), "must be"); + return as_klass()->name()->as_utf8(); + } +} + +// ------------------------------------------------------------------ // ciType::print_impl // // Implementation of the print method. @@ -73,7 +86,8 @@ // // Print the name of this type void ciType::print_name_on(outputStream* st) { - st->print(type2name(basic_type())); + ResourceMark rm; + st->print(name()); }
--- a/src/share/vm/ci/ciType.hpp Mon Jan 14 08:22:32 2013 -0800 +++ b/src/share/vm/ci/ciType.hpp Tue Jan 15 12:06:18 2013 -0800 @@ -77,6 +77,7 @@ bool is_type() const { return true; } bool is_classless() const { return is_primitive_type(); } + const char* name(); virtual void print_name_on(outputStream* st); void print_name() { print_name_on(tty);
--- a/src/share/vm/opto/doCall.cpp Mon Jan 14 08:22:32 2013 -0800 +++ b/src/share/vm/opto/doCall.cpp Tue Jan 15 12:06:18 2013 -0800 @@ -553,7 +553,13 @@ rtype = ctype; } } else { - assert(rtype == ctype, "mismatched return types"); // symbolic resolution enforces this + // Symbolic resolution enforces the types to be the same. + // NOTE: We must relax the assert for unloaded types because two + // different ciType instances of the same unloaded class type + // can appear to be "loaded" by different loaders (depending on + // the accessing class). + assert(!rtype->is_loaded() || !ctype->is_loaded() || rtype == ctype, + err_msg_res("mismatched return types: rtype=%s, ctype=%s", rtype->name(), ctype->name())); } // If the return type of the method is not loaded, assert that the