src/share/vm/opto/callnode.cpp
Index Unified diffs Context diffs Sdiffs Patch New Old Previous File Next File hotspot Sdiff src/share/vm/opto

src/share/vm/opto/callnode.cpp

Print this page
rev 6950 : 8055910: closed/java/util/Collections/CheckedCollections.java failed with ClassCastException not thrown
Summary: missing subtype check for Arrays.copyOf intrinsic
Reviewed-by:


1813       this->set_non_esc_obj();
1814     }
1815   }
1816   return result;
1817 }
1818 
1819 ArrayCopyNode::ArrayCopyNode(Compile* C, bool alloc_tightly_coupled)
1820   : CallNode(arraycopy_type(), NULL, TypeRawPtr::BOTTOM), _alloc_tightly_coupled(alloc_tightly_coupled), _kind(ArrayCopy) {
1821   init_class_id(Class_ArrayCopy);
1822   init_flags(Flag_is_macro);
1823   C->add_macro_node(this);
1824 }
1825 
1826 uint ArrayCopyNode::size_of() const { return sizeof(*this); }
1827 
1828 ArrayCopyNode* ArrayCopyNode::make(GraphKit* kit, bool may_throw,
1829                                    Node* src, Node* src_offset,
1830                                    Node* dest, Node* dest_offset,
1831                                    Node* length,
1832                                    bool alloc_tightly_coupled,
1833                                    Node* src_length, Node* dest_length,
1834                                    Node* src_klass, Node* dest_klass) {
1835 
1836   ArrayCopyNode* ac = new ArrayCopyNode(kit->C, alloc_tightly_coupled);
1837   Node* prev_mem = kit->set_predefined_input_for_runtime_call(ac);
1838 
1839   ac->init_req(ArrayCopyNode::Src, src);
1840   ac->init_req(ArrayCopyNode::SrcPos, src_offset);
1841   ac->init_req(ArrayCopyNode::Dest, dest);
1842   ac->init_req(ArrayCopyNode::DestPos, dest_offset);
1843   ac->init_req(ArrayCopyNode::Length, length);
1844   ac->init_req(ArrayCopyNode::SrcLen, src_length);
1845   ac->init_req(ArrayCopyNode::DestLen, dest_length);
1846   ac->init_req(ArrayCopyNode::SrcKlass, src_klass);
1847   ac->init_req(ArrayCopyNode::DestKlass, dest_klass);
1848 
1849   if (may_throw) {
1850     ac->set_req(TypeFunc::I_O , kit->i_o());
1851     kit->add_safepoint_edges(ac, false);
1852   }
1853 
1854   return ac;


1813       this->set_non_esc_obj();
1814     }
1815   }
1816   return result;
1817 }
1818 
1819 ArrayCopyNode::ArrayCopyNode(Compile* C, bool alloc_tightly_coupled)
1820   : CallNode(arraycopy_type(), NULL, TypeRawPtr::BOTTOM), _alloc_tightly_coupled(alloc_tightly_coupled), _kind(ArrayCopy) {
1821   init_class_id(Class_ArrayCopy);
1822   init_flags(Flag_is_macro);
1823   C->add_macro_node(this);
1824 }
1825 
1826 uint ArrayCopyNode::size_of() const { return sizeof(*this); }
1827 
1828 ArrayCopyNode* ArrayCopyNode::make(GraphKit* kit, bool may_throw,
1829                                    Node* src, Node* src_offset,
1830                                    Node* dest, Node* dest_offset,
1831                                    Node* length,
1832                                    bool alloc_tightly_coupled,
1833                                    Node* src_klass, Node* dest_klass,
1834                                    Node* src_length, Node* dest_length) {
1835 
1836   ArrayCopyNode* ac = new ArrayCopyNode(kit->C, alloc_tightly_coupled);
1837   Node* prev_mem = kit->set_predefined_input_for_runtime_call(ac);
1838 
1839   ac->init_req(ArrayCopyNode::Src, src);
1840   ac->init_req(ArrayCopyNode::SrcPos, src_offset);
1841   ac->init_req(ArrayCopyNode::Dest, dest);
1842   ac->init_req(ArrayCopyNode::DestPos, dest_offset);
1843   ac->init_req(ArrayCopyNode::Length, length);
1844   ac->init_req(ArrayCopyNode::SrcLen, src_length);
1845   ac->init_req(ArrayCopyNode::DestLen, dest_length);
1846   ac->init_req(ArrayCopyNode::SrcKlass, src_klass);
1847   ac->init_req(ArrayCopyNode::DestKlass, dest_klass);
1848 
1849   if (may_throw) {
1850     ac->set_req(TypeFunc::I_O , kit->i_o());
1851     kit->add_safepoint_edges(ac, false);
1852   }
1853 
1854   return ac;
src/share/vm/opto/callnode.cpp
Index Unified diffs Context diffs Sdiffs Patch New Old Previous File Next File