Mercurial > hg > graal-compiler
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 |