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:
parent
8e857bbfab
commit
121bc7dc36
4 changed files with 91 additions and 0 deletions
|
@ -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>
|
||||
|
||||
* ipa-devirt.c (get_polymorphic_call_info): Use fndecl instead of
|
||||
|
|
|
@ -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 */
|
||||
|
||||
|
|
|
@ -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>
|
||||
|
||||
* gcc.target/arm/max-insns-skipped.c: New test.
|
||||
|
|
78
gcc/testsuite/g++.dg/pr62079.C
Normal file
78
gcc/testsuite/g++.dg/pr62079.C
Normal 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"));
|
||||
}
|
Loading…
Add table
Reference in a new issue