From 280d03f033297433d3e92ad3a7594ac0b75e9d53 Mon Sep 17 00:00:00 2001 From: rguenth Date: Thu, 14 Aug 2014 08:56:49 +0000 Subject: [PATCH] 2014-08-14 Richard Biener PR rtl-optimization/62079 * recog.c (peephole2_optimize): If peep2_do_cleanup_cfg run cleanup_cfg. * g++.dg/pr62079.C: New testcase. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@213950 138bc75d-0d04-0410-961f-82ee72b054a4 --- gcc/ChangeLog | 6 ++++ gcc/recog.c | 2 ++ gcc/testsuite/ChangeLog | 5 +++ gcc/testsuite/g++.dg/pr62079.C | 78 ++++++++++++++++++++++++++++++++++++++++++ 4 files changed, 91 insertions(+) create mode 100644 gcc/testsuite/g++.dg/pr62079.C diff --git a/gcc/ChangeLog b/gcc/ChangeLog index b821fd49791..7ec321cddf8 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2014-08-14 Richard Biener + + PR rtl-optimization/62079 + * recog.c (peephole2_optimize): If peep2_do_cleanup_cfg + run cleanup_cfg. + 2014-08-14 Ilya Enkovich * ipa-devirt.c (get_polymorphic_call_info): Use fndecl instead of diff --git a/gcc/recog.c b/gcc/recog.c index cb4988311e2..167b044a3ae 100644 --- a/gcc/recog.c +++ b/gcc/recog.c @@ -3553,6 +3553,8 @@ peephole2_optimize (void) BITMAP_FREE (live); if (peep2_do_rebuild_jump_labels) rebuild_jump_labels (get_insns ()); + if (peep2_do_cleanup_cfg) + cleanup_cfg (CLEANUP_CFG_CHANGED); } #endif /* HAVE_peephole2 */ diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index ad9cce29706..0dd986b4c96 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2014-08-14 Richard Biener + + PR rtl-optimization/62079 + * g++.dg/pr62079.C: New testcase. + 2014-08-14 Zhenqiang Chen * gcc.target/arm/max-insns-skipped.c: New test. diff --git a/gcc/testsuite/g++.dg/pr62079.C b/gcc/testsuite/g++.dg/pr62079.C new file mode 100644 index 00000000000..919c3e5de36 --- /dev/null +++ b/gcc/testsuite/g++.dg/pr62079.C @@ -0,0 +1,78 @@ +// { dg-do compile } +// { dg-options "-std=c++11 -O2 -fnon-call-exceptions" } + +template < typename > 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; + +template < typename _Tp > class new_allocator +{ + template < typename _Tp1 > struct rebind + { + typedef new_allocator < _Tp1 > other; + }; +}; + +template < typename _Tp > using __allocator_base = new_allocator < _Tp >; +template < typename _Tp > class allocator:public __allocator_base < _Tp > +{ +}; + +template < typename _CharT, typename _Traits, typename _Alloc > + class basic_string +{ +public: + basic_string (const _CharT * __s, const _Alloc & __a = _Alloc ()); + ~basic_string ()noexcept; +}; + +template < typename T > struct add_reference +{ + typedef T & type; +}; + +template < typename ... Values > class tuple; +template <> class tuple <> +{ +}; + +template < typename Head, typename ... Tail > class tuple < Head, Tail ... >:private tuple < + Tail ... + > +{ + typedef tuple < Tail ... >inherited; +public: + template < typename ... VValues > + tuple (const tuple < VValues ... >&other):inherited (other.tail ()), + m_head (other.head ()) + { + } + typename add_reference < const Head >::type head () const + { + return m_head; + } + const inherited & tail () const + { + return *this; + } + Head m_head; +}; + +template < typename T > struct make_tuple_result +{ + typedef T type; +}; + +template < typename ... Values > + tuple < typename make_tuple_result < + Values >::type ... >make_tuple (const Values & ... values); + +int +main () +{ + tuple < int, float, string > t3c = + make_tuple (17, 2.718281828, string ("Fun")); +} -- 2.11.4.GIT