Mercurial > hg > CbC > CbC_gcc
view gcc/testsuite/g++.dg/opt/noreturn-1.C @ 131:84e7813d76e9
gcc-8.2
author | mir3636 |
---|---|
date | Thu, 25 Oct 2018 07:37:49 +0900 |
parents | 04ced10e8804 |
children |
line wrap: on
line source
// PR optimization/12965 // Origin: <qboosh@pld-linux.org> // Reduced testcase: Falk Hueffner <falk@debian.org> // This ICEd on Alpha because the reload pass emitted save/restore // insns around a no-return call. // { dg-do compile } // { dg-options "-O2" } template <typename _Alloc> class allocator; template <class _CharT> struct char_traits; template <typename _CharT, typename _Traits = char_traits<_CharT>, typename _Alloc = allocator<_CharT> > class basic_string; typedef basic_string<char> string; static inline int __exchange_and_add(volatile int * __mem, int __val) { int __result; asm("" : "=&r"(__result)); return __result; } template<typename _Tp> struct allocator { allocator() throw() { } allocator(const allocator &) throw() {} }; template<typename _CharT, typename _Traits, typename _Alloc> struct basic_string { typedef _Alloc allocator_type; struct _Rep { int _M_references; void _M_dispose(const _Alloc & __a) { if (__exchange_and_add(&_M_references, -1) <= 0) _M_destroy(__a); } void _M_destroy(const _Alloc &) throw(); }; struct _Alloc_hider : _Alloc { _CharT *_M_p; }; mutable _Alloc_hider _M_dataplus; _CharT *_M_data() const { return _M_dataplus._M_p; } _Rep *_M_rep() const { return &((reinterpret_cast<_Rep *>(_M_data()))[-1]); } basic_string(); basic_string(const _CharT * __s, const _Alloc & __a = _Alloc()); ~basic_string() { _M_rep()->_M_dispose(this->get_allocator()); } allocator_type get_allocator() const { return _M_dataplus; } }; struct Egeneric { void stack(const string & passage, const string & message = "") { } }; struct infinint { void detruit() #if __cplusplus <= 201402L throw(Egeneric) // { dg-warning "deprecated" "" { target { c++11 && { ! c++17 } } } } #endif ; template<class T> void infinint_from(T a) #if __cplusplus <= 201402L throw(Egeneric) // { dg-warning "deprecated" "" { target { c++11 && { ! c++17 } } } } #endif ; infinint(long a = 0) #if __cplusplus <= 201402L throw(Egeneric) // { dg-warning "deprecated" "" { target { c++11 && { ! c++17 } } } } #endif { try { infinint_from(a); } catch(Egeneric& e) { e.stack("infinint::infinint", "long"); } } ~infinint() #if __cplusplus <= 201402L throw(Egeneric) // { dg-warning "deprecated" "" { target { c++11 && { ! c++17 } } } } #else noexcept(false) #endif { try { detruit(); } catch(Egeneric& e) { } } }; struct inode { string x; infinint a, c; infinint ea_offset; inode(); }; inode::inode() { ea_offset = 0; }