[PR 70965] Schedule extra rebuild_cgraph_edges
2016-11-25 Martin Jambor <mjambor@suse.cz> PR tree-optimization/70965 * passes.def (pass_build_ssa_passes): Add pass_rebuild_cgraph_edges. gcc/testsuite/ * g++.dg/pr70965.C: New test. From-SVN: r242867
This commit is contained in:
parent
2dbe91cff1
commit
54e606f0b1
@ -1,3 +1,8 @@
|
|||||||
|
2016-11-25 Martin Jambor <mjambor@suse.cz>
|
||||||
|
|
||||||
|
PR tree-optimization/70965
|
||||||
|
* passes.def (pass_build_ssa_passes): Add pass_rebuild_cgraph_edges.
|
||||||
|
|
||||||
2016-11-24 James Greenahlgh <james.greenhalgh@arm.com>
|
2016-11-24 James Greenahlgh <james.greenhalgh@arm.com>
|
||||||
|
|
||||||
PR target/78509
|
PR target/78509
|
||||||
|
@ -56,6 +56,7 @@ along with GCC; see the file COPYING3. If not see
|
|||||||
NEXT_PASS (pass_build_ssa_passes);
|
NEXT_PASS (pass_build_ssa_passes);
|
||||||
PUSH_INSERT_PASSES_WITHIN (pass_build_ssa_passes)
|
PUSH_INSERT_PASSES_WITHIN (pass_build_ssa_passes)
|
||||||
NEXT_PASS (pass_fixup_cfg);
|
NEXT_PASS (pass_fixup_cfg);
|
||||||
|
NEXT_PASS (pass_rebuild_cgraph_edges);
|
||||||
NEXT_PASS (pass_build_ssa);
|
NEXT_PASS (pass_build_ssa);
|
||||||
NEXT_PASS (pass_warn_nonnull_compare);
|
NEXT_PASS (pass_warn_nonnull_compare);
|
||||||
NEXT_PASS (pass_ubsan);
|
NEXT_PASS (pass_ubsan);
|
||||||
|
@ -1,3 +1,8 @@
|
|||||||
|
2016-11-25 Martin Jambor <mjambor@suse.cz>
|
||||||
|
|
||||||
|
PR tree-optimization/70965
|
||||||
|
* g++.dg/pr70965.C: New test.
|
||||||
|
|
||||||
2016-11-25 Jakub Jelinek <jakub@redhat.com>
|
2016-11-25 Jakub Jelinek <jakub@redhat.com>
|
||||||
Andreas Schwab <schwab@linux-m68k.org>
|
Andreas Schwab <schwab@linux-m68k.org>
|
||||||
|
|
||||||
|
21
gcc/testsuite/g++.dg/pr70965.C
Normal file
21
gcc/testsuite/g++.dg/pr70965.C
Normal file
@ -0,0 +1,21 @@
|
|||||||
|
/* { dg-do compile } */
|
||||||
|
/* { dg-options "-O2 -std=c++11" } */
|
||||||
|
|
||||||
|
struct A {};
|
||||||
|
struct B {};
|
||||||
|
struct C { using p = int *; template <typename> using ra = A; };
|
||||||
|
struct J : C { template <typename> struct K { typedef C::ra<int> o; }; };
|
||||||
|
template <typename> struct D
|
||||||
|
{
|
||||||
|
struct H : J::K<int>::o { H (J::p, A) : J::K<int>::o () {} };
|
||||||
|
H d;
|
||||||
|
D (const char *, const A &x = A ()) : d (0, x) {}
|
||||||
|
};
|
||||||
|
extern template class D<char>;
|
||||||
|
enum L { M };
|
||||||
|
struct F { virtual char *foo (); };
|
||||||
|
template <class> struct I : B { static int foo (int) {} };
|
||||||
|
struct G { typedef I<int> t; };
|
||||||
|
void foo (int) { G::t::foo (0); }
|
||||||
|
void bar (const D<char> &, const D<int> &, int, L);
|
||||||
|
void baz () try { foo (0); } catch (F &e) { bar (e.foo (), "", 0, M); }
|
Loading…
Reference in New Issue
Block a user