| /* This used to ICE due to a backend problem on s390. */ |
| |
| /* { dg-do compile } */ |
| /* { dg-options "-O1" } */ |
| |
| class ReferenceCounted |
| { |
| public: |
| |
| virtual ~ ReferenceCounted () |
| { |
| } |
| void decrementRefCount () const |
| { |
| if (--const_cast < unsigned int &>(_ref_count) == 0) |
| { |
| delete this; |
| } |
| } |
| unsigned int _ref_count; |
| }; |
| |
| template < class T > class RefCountPointer |
| { |
| public: |
| |
| RefCountPointer (T * p = 0):_p (p) |
| { |
| } |
| RefCountPointer & operator= (const RefCountPointer < T > &o) |
| { |
| if (_p != o._p) |
| { |
| if (_p != 0) |
| _p->decrementRefCount (); |
| } |
| static RefCountPointer a; |
| return a; |
| } |
| ~RefCountPointer () |
| { |
| } |
| T *_p; |
| }; |
| class Item:public ReferenceCounted |
| { |
| public: |
| |
| typedef RefCountPointer < const Item > Ptr; |
| }; |
| class AnyAtomicType:public Item |
| { |
| }; |
| class StaticContext |
| { |
| }; |
| class DynamicContext:public StaticContext |
| { |
| }; |
| class SortableItem |
| { |
| SortableItem (); |
| int m_bAscending:1; |
| DynamicContext *m_context; |
| AnyAtomicType::Ptr m_item; |
| }; |
| SortableItem::SortableItem () |
| { |
| m_context = __null; |
| m_item = __null; |
| } |