Viewing file: 44473-1.C (2.9 KB) -rw-r--r-- Select action/file-type: (+) | (+) | (+) | Code (+) | Session (+) | (+) | SDB (+) | (+) | (+) | (+) | (+) | (+) |
/* { dg-do assemble } */ /* { dg-additional-options "-Wno-return-type" } */
/* Minimized from the testcase in PR c++/44473; mangling of decimal types did not include CV qualifiers. */
namespace std { namespace decimal { class decimal32 { public: typedef float __decfloat32 __attribute__ ((mode (SD))); explicit decimal32 (float __r):__val (__r) {} private: __decfloat32 __val; }; };
template <typename _BI1, typename _BI2> _BI2 copy_backward (_BI1 __first, _BI2 __result); }
namespace __gnu_cxx { template <typename _Iterator, typename _Container> class __normal_iterator { public: explicit __normal_iterator (const _Iterator & __i) {} const _Iterator & base () const {} };
template <typename _IteratorL, typename _IteratorR, typename _Container> bool operator== (const __normal_iterator <_IteratorL, _Container> &__lhs, const __normal_iterator <_IteratorR, _Container> &__rhs) { return __lhs.base () == __rhs.base (); }
template <typename _Tp> class new_allocator { public: typedef _Tp *pointer; typedef const _Tp *const_pointer; template <typename _Tp1> struct rebind { typedef new_allocator <_Tp1> other; }; }; }
namespace std { template <typename _Tp> class allocator:public __gnu_cxx::new_allocator <_Tp> {};
template <typename _Tp, typename _Alloc> struct _Vector_base { typedef typename _Alloc::template rebind <_Tp>::other _Tp_alloc_type; struct _Vector_impl:public _Tp_alloc_type { typename _Tp_alloc_type::pointer _M_finish; }; public: _Vector_impl _M_impl; };
template <typename _Tp, typename _Alloc = std::allocator <_Tp> > class vector:protected _Vector_base <_Tp, _Alloc> { typedef _Vector_base <_Tp, _Alloc> _Base; typedef typename _Base::_Tp_alloc_type _Tp_alloc_type; public: typedef _Tp value_type; typedef typename _Tp_alloc_type::pointer pointer; typedef typename _Tp_alloc_type::const_pointer const_pointer; typedef __gnu_cxx::__normal_iterator <pointer, vector> iterator; typedef __gnu_cxx::__normal_iterator <const_pointer, vector> const_iterator; const_iterator begin () const; iterator end () { return iterator (this->_M_impl._M_finish); } const_iterator end () const { return const_iterator (this->_M_impl._M_finish); } bool empty () const { return begin () == end (); } void push_back (const value_type & __x) { _M_insert_aux (end ()); } void _M_insert_aux (iterator __position); };
template <typename _Tp, typename _Alloc> void vector <_Tp, _Alloc>::_M_insert_aux (iterator __position) { std::copy_backward (__position.base (), this->_M_impl._M_finish - 1); } }
std::vector <std::decimal::decimal32> vec;
int foo () { return (vec.empty ()) ? 1 : 0; }
bool bar () { vec.push_back (std::decimal::decimal32 (0)); return true; }
|