re PR tree-optimization/62079 (ICE: in calc_dfs_tree, at dominance.c:401 with -fnon-call-exceptions)

2014-08-14  Richard Biener  <rguenther@suse.de>

	PR rtl-optimization/62079
	* recog.c (peephole2_optimize): If peep2_do_cleanup_cfg
	run cleanup_cfg.

	* g++.dg/pr62079.C: New testcase.

From-SVN: r213950
This commit is contained in:
Richard Biener 2014-08-14 08:56:49 +00:00 committed by Richard Biener
parent 8e857bbfab
commit 121bc7dc36
4 changed files with 91 additions and 0 deletions

View file

@ -1,3 +1,9 @@
2014-08-14 Richard Biener <rguenther@suse.de>
PR rtl-optimization/62079
* recog.c (peephole2_optimize): If peep2_do_cleanup_cfg
run cleanup_cfg.
2014-08-14 Ilya Enkovich <ilya.enkovich@intel.com> 2014-08-14 Ilya Enkovich <ilya.enkovich@intel.com>
* ipa-devirt.c (get_polymorphic_call_info): Use fndecl instead of * ipa-devirt.c (get_polymorphic_call_info): Use fndecl instead of

View file

@ -3553,6 +3553,8 @@ peephole2_optimize (void)
BITMAP_FREE (live); BITMAP_FREE (live);
if (peep2_do_rebuild_jump_labels) if (peep2_do_rebuild_jump_labels)
rebuild_jump_labels (get_insns ()); rebuild_jump_labels (get_insns ());
if (peep2_do_cleanup_cfg)
cleanup_cfg (CLEANUP_CFG_CHANGED);
} }
#endif /* HAVE_peephole2 */ #endif /* HAVE_peephole2 */

View file

@ -1,3 +1,8 @@
2014-08-14 Richard Biener <rguenther@suse.de>
PR rtl-optimization/62079
* g++.dg/pr62079.C: New testcase.
2014-08-14 Zhenqiang Chen <zhenqiang.chen@arm.com> 2014-08-14 Zhenqiang Chen <zhenqiang.chen@arm.com>
* gcc.target/arm/max-insns-skipped.c: New test. * gcc.target/arm/max-insns-skipped.c: New test.

View file

@ -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"));
}