comparison src/share/vm/opto/type.hpp @ 820:915cc9c5ebc6

6837094: False positive for "meet not symmetric" failure Summary: Have the meet not symmetric check recursively do the interface-vs-oop check on array subtypes. Reviewed-by: jrose Contributed-by: rasbold@google.com
author kvn
date Tue, 23 Jun 2009 17:52:29 -0700
parents 7bb995fbd3c0
children bf3489cc0aa0
comparison
equal deleted inserted replaced
819:c6386080541b 820:915cc9c5ebc6
187 187
188 // Modified version of JOIN adapted to the needs Node::Value. 188 // Modified version of JOIN adapted to the needs Node::Value.
189 // Normalizes all empty values to TOP. Does not kill _widen bits. 189 // Normalizes all empty values to TOP. Does not kill _widen bits.
190 // Currently, it also works around limitations involving interface types. 190 // Currently, it also works around limitations involving interface types.
191 virtual const Type *filter( const Type *kills ) const; 191 virtual const Type *filter( const Type *kills ) const;
192
193 #ifdef ASSERT
194 // One type is interface, the other is oop
195 virtual bool interface_vs_oop(const Type *t) const;
196 #endif
192 197
193 // Returns true if this pointer points at memory which contains a 198 // Returns true if this pointer points at memory which contains a
194 // compressed oop references. 199 // compressed oop references.
195 bool is_ptr_to_narrowoop() const; 200 bool is_ptr_to_narrowoop() const;
196 201
544 static const TypeAry *make( const Type *elem, const TypeInt *size); 549 static const TypeAry *make( const Type *elem, const TypeInt *size);
545 550
546 virtual const Type *xmeet( const Type *t ) const; 551 virtual const Type *xmeet( const Type *t ) const;
547 virtual const Type *xdual() const; // Compute dual right now. 552 virtual const Type *xdual() const; // Compute dual right now.
548 bool ary_must_be_exact() const; // true if arrays of such are never generic 553 bool ary_must_be_exact() const; // true if arrays of such are never generic
554 #ifdef ASSERT
555 // One type is interface, the other is oop
556 virtual bool interface_vs_oop(const Type *t) const;
557 #endif
549 #ifndef PRODUCT 558 #ifndef PRODUCT
550 virtual void dump2( Dict &d, uint, outputStream *st ) const; // Specialized per-Type dumping 559 virtual void dump2( Dict &d, uint, outputStream *st ) const; // Specialized per-Type dumping
551 #endif 560 #endif
552 }; 561 };
553 562
865 assert((uint)elem <= T_CONFLICT && _array_body_type[elem] != NULL, "bad elem type"); 874 assert((uint)elem <= T_CONFLICT && _array_body_type[elem] != NULL, "bad elem type");
866 return _array_body_type[elem]; 875 return _array_body_type[elem];
867 } 876 }
868 static const TypeAryPtr *_array_body_type[T_CONFLICT+1]; 877 static const TypeAryPtr *_array_body_type[T_CONFLICT+1];
869 // sharpen the type of an int which is used as an array size 878 // sharpen the type of an int which is used as an array size
879 #ifdef ASSERT
880 // One type is interface, the other is oop
881 virtual bool interface_vs_oop(const Type *t) const;
882 #endif
870 #ifndef PRODUCT 883 #ifndef PRODUCT
871 virtual void dump2( Dict &d, uint depth, outputStream *st ) const; // Specialized per-Type dumping 884 virtual void dump2( Dict &d, uint depth, outputStream *st ) const; // Specialized per-Type dumping
872 #endif 885 #endif
873 }; 886 };
874 887