Fix for PR64068 and PR64559.
* g++.dg/ipa/pr64068.C: New test. * gcc.dg/ipa/PR64559.c: New test. PR ipa/64068 PR ipa/64559 * ipa.c (symbol_table::remove_unreachable_nodes): Do not put abstract origins into boundary. From-SVN: r219672
This commit is contained in:
parent
40d54d2432
commit
c23127ce74
5 changed files with 100 additions and 1 deletions
|
@ -1,3 +1,10 @@
|
|||
2015-01-15 Jan Hubicka <hubicka@ucw.cz>
|
||||
|
||||
PR ipa/64068
|
||||
PR ipa/64559
|
||||
* ipa.c (symbol_table::remove_unreachable_nodes):
|
||||
Do not put abstract origins into boundary.
|
||||
|
||||
2015-01-15 Evgeny Stupachenko <evstupac@gmail.com>
|
||||
|
||||
* config/i386/gnu-user.h (CRT_GET_RFIB_DATA): Remove EBX register usage.
|
||||
|
|
|
@ -400,7 +400,6 @@ symbol_table::remove_unreachable_nodes (FILE *file)
|
|||
n = n->next_sibling_clone)
|
||||
if (n->decl == DECL_ABSTRACT_ORIGIN (node->decl))
|
||||
n->used_as_abstract_origin = true;
|
||||
enqueue_node (origin_node, &first, &reachable);
|
||||
}
|
||||
}
|
||||
/* If any symbol in a comdat group is reachable, force
|
||||
|
|
|
@ -1,3 +1,8 @@
|
|||
2015-01-15 Martin Liska <mliska@suse.cz>
|
||||
|
||||
* g++.dg/ipa/pr64068.C: New test.
|
||||
* gcc.dg/ipa/PR64559.c: New test.
|
||||
|
||||
2015-01-15 H.J. Lu <hongjiu.lu@intel.com>
|
||||
|
||||
* g++.dg/other/anon5.C: Ignore additional messages on Linux/x86
|
||||
|
|
49
gcc/testsuite/g++.dg/ipa/pr64068.C
Normal file
49
gcc/testsuite/g++.dg/ipa/pr64068.C
Normal file
|
@ -0,0 +1,49 @@
|
|||
/* { dg-do compile } */
|
||||
/* { dg-options "-O2" } */
|
||||
|
||||
typedef int PROV_ENUMALGS_EX, PCCRYPT_OID_INFO;
|
||||
class A {
|
||||
int m_fn2();
|
||||
virtual bool m_fn1(PCCRYPT_OID_INFO);
|
||||
};
|
||||
int fn1();
|
||||
void fn2();
|
||||
int A::m_fn2() { m_fn1(0); }
|
||||
|
||||
bool fn3() {
|
||||
for (;;) {
|
||||
if (fn1()) {
|
||||
if (fn1() != 259)
|
||||
fn2();
|
||||
break;
|
||||
}
|
||||
return 1;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
class B {
|
||||
public:
|
||||
B() { fn3(); }
|
||||
};
|
||||
class C : A {
|
||||
bool m_fn1(PCCRYPT_OID_INFO) { m_fn3(); }
|
||||
int isSupportedByProvider_algId;
|
||||
PROV_ENUMALGS_EX isSupportedByProvider_outEnumAlgs;
|
||||
PROV_ENUMALGS_EX isSupportedByProvider_enumAlgs;
|
||||
bool m_fn3() {
|
||||
while (1) {
|
||||
if (fn1()) {
|
||||
if (fn1() != 259)
|
||||
fn2();
|
||||
break;
|
||||
}
|
||||
if (isSupportedByProvider_algId)
|
||||
isSupportedByProvider_outEnumAlgs = isSupportedByProvider_enumAlgs;
|
||||
return 1;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
};
|
||||
|
||||
void fn4() { B(); }
|
39
gcc/testsuite/gcc.dg/ipa/PR64559.c
Normal file
39
gcc/testsuite/gcc.dg/ipa/PR64559.c
Normal file
|
@ -0,0 +1,39 @@
|
|||
/* { dg-do compile } */
|
||||
/* { dg-options "-Os" } */
|
||||
|
||||
int a, b, c, d;
|
||||
|
||||
struct S
|
||||
{
|
||||
int f0;
|
||||
};
|
||||
|
||||
static int
|
||||
fn1 (int p)
|
||||
{
|
||||
return p == 0 || a;
|
||||
}
|
||||
|
||||
static int
|
||||
fn2 ()
|
||||
{
|
||||
d = fn1 (c);
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int
|
||||
fn3 (struct S p)
|
||||
{
|
||||
p.f0 || fn2 ();
|
||||
if (fn1 (1))
|
||||
b = 0;
|
||||
return 0;
|
||||
}
|
||||
|
||||
int
|
||||
main ()
|
||||
{
|
||||
struct S e = { 1 };
|
||||
fn3 (e);
|
||||
return 0;
|
||||
}
|
Loading…
Add table
Reference in a new issue