re PR tree-optimization/42386 (ICE in ipcp_iterate_stage, at ipa-cp.c:766)
PR c++/42386 * ipa.c (function_and_variable_visibility): Clear same_comdat_group links of DECL_EXTERNAL nodes. * g++.dg/opt/dtor3.C: New test. From-SVN: r155321
This commit is contained in:
parent
a0274eae64
commit
3fd54fb075
|
@ -1,3 +1,9 @@
|
|||
2009-12-17 Jakub Jelinek <jakub@redhat.com>
|
||||
|
||||
PR c++/42386
|
||||
* ipa.c (function_and_variable_visibility): Clear same_comdat_group
|
||||
links of DECL_EXTERNAL nodes.
|
||||
|
||||
2009-12-17 Sandra Loosemore <sandra@codesourcery.com>
|
||||
|
||||
* doc/rtl.texi (Vector Operations): Clarify vec_select result mode.
|
||||
|
|
17
gcc/ipa.c
17
gcc/ipa.c
|
@ -370,6 +370,23 @@ function_and_variable_visibility (bool whole_program)
|
|||
happy. Clear the flag here to avoid confusion in middle-end. */
|
||||
if (DECL_COMDAT (node->decl) && !TREE_PUBLIC (node->decl))
|
||||
DECL_COMDAT (node->decl) = 0;
|
||||
/* For external decls stop tracking same_comdat_group, it doesn't matter
|
||||
what comdat group they are in when they won't be emitted in this TU,
|
||||
and simplifies later passes. */
|
||||
if (node->same_comdat_group && DECL_EXTERNAL (node->decl))
|
||||
{
|
||||
struct cgraph_node *n = node, *next;
|
||||
do
|
||||
{
|
||||
/* If at least one of same comdat group functions is external,
|
||||
all of them have to be, otherwise it is a front-end bug. */
|
||||
gcc_assert (DECL_EXTERNAL (n->decl));
|
||||
next = n->same_comdat_group;
|
||||
n->same_comdat_group = NULL;
|
||||
n = next;
|
||||
}
|
||||
while (n != node);
|
||||
}
|
||||
gcc_assert ((!DECL_WEAK (node->decl) && !DECL_COMDAT (node->decl))
|
||||
|| TREE_PUBLIC (node->decl) || DECL_EXTERNAL (node->decl));
|
||||
if (cgraph_externally_visible_p (node, whole_program))
|
||||
|
|
|
@ -1,3 +1,8 @@
|
|||
2009-12-17 Jakub Jelinek <jakub@redhat.com>
|
||||
|
||||
PR c++/42386
|
||||
* g++.dg/opt/dtor3.C: New test.
|
||||
|
||||
2009-12-17 Arnaud Charlet <charlet@adacore.com>
|
||||
|
||||
* ada/acats/run_all.sh: Strip comments from norun.lst
|
||||
|
|
|
@ -0,0 +1,11 @@
|
|||
// PR c++/42386
|
||||
// { dg-do compile }
|
||||
// { dg-options "-O2" }
|
||||
# 1 "A.h" 1
|
||||
#pragma interface
|
||||
struct D { virtual bool d () const; };
|
||||
struct E { virtual ~E (); virtual void *e () const = 0; };
|
||||
struct A : public D, public E { ~A () {} };
|
||||
# 5 "dtor3.C" 1
|
||||
struct F : public A { void *f () const; void *e () const; };
|
||||
void *F::e () const { return __null; }
|
Loading…
Reference in New Issue