From e87da26377c895769d3ac3706833b0f8290bebb9 Mon Sep 17 00:00:00 2001 From: Richard Guenther Date: Wed, 27 Jan 2010 16:00:31 +0000 Subject: [PATCH] re PR tree-optimization/42878 ("-fcompare-debug failure" at -O1 (2)) 2010-01-27 Richard Guenther PR middle-end/42878 * tree-inline.c (remap_decl): Delay remapping of SSA name default definitions until we need them. * gcc.dg/torture/pr42878-1.c: New testcase. * gcc.dg/torture/pr42878-2.c: Likewise. From-SVN: r156291 --- gcc/ChangeLog | 6 +++++ gcc/testsuite/ChangeLog | 6 +++++ gcc/testsuite/gcc.dg/torture/pr42878-1.c | 30 +++++++++++++++++++++ gcc/testsuite/gcc.dg/torture/pr42878-2.c | 34 ++++++++++++++++++++++++ gcc/tree-inline.c | 10 ------- 5 files changed, 76 insertions(+), 10 deletions(-) create mode 100644 gcc/testsuite/gcc.dg/torture/pr42878-1.c create mode 100644 gcc/testsuite/gcc.dg/torture/pr42878-2.c diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 290b3544085..41f7bad4b13 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2010-01-27 Richard Guenther + + PR middle-end/42878 + * tree-inline.c (remap_decl): Delay remapping of SSA name + default definitions until we need them. + 2010-01-27 Jakub Jelinek * config/rs6000/rs6000.c (TARGET_DELEGITIMIZE_ADDRESS): Redefine. diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index fd63e1b5f3c..ef9940e3fa9 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,9 @@ +2010-01-27 Richard Guenther + + PR middle-end/42878 + * gcc.dg/torture/pr42878-1.c: New testcase. + * gcc.dg/torture/pr42878-2.c: Likewise. + 2010-01-27 Jakub Jelinek PR middle-end/42874 diff --git a/gcc/testsuite/gcc.dg/torture/pr42878-1.c b/gcc/testsuite/gcc.dg/torture/pr42878-1.c new file mode 100644 index 00000000000..8c21f0f600d --- /dev/null +++ b/gcc/testsuite/gcc.dg/torture/pr42878-1.c @@ -0,0 +1,30 @@ +/* { dg-do compile } */ +/* { dg-options "-fcompare-debug" } */ + +struct S { + int i; +}; + +extern struct S *e1(void); +extern int e2(int i); + +static inline void f1() +{ + int i; + struct S *s; + for (i = 0; i < 10; i++) + s = e1(); + e2(s->i); +} + +static inline void f2(int i) +{ + int j = j; + j = e2(i); +} + +void foo(int i) +{ + f1(); + f2(i); +} diff --git a/gcc/testsuite/gcc.dg/torture/pr42878-2.c b/gcc/testsuite/gcc.dg/torture/pr42878-2.c new file mode 100644 index 00000000000..67e413a2c91 --- /dev/null +++ b/gcc/testsuite/gcc.dg/torture/pr42878-2.c @@ -0,0 +1,34 @@ +/* { dg-do compile } */ +/* { dg-options "-fcompare-debug" } */ + +extern void error(void) __attribute__((noreturn)); + +struct S { + struct S *s; +}; + +static inline unsigned char f2() +{ + error(); +} + +static inline void f1() +{ + int builtin_optab; + if (!f2() && builtin_optab) + error(); +} + +extern void f4(struct S *s); + +static inline void f3(struct S *s) +{ + f4(s->s->s); +} + +void expand_builtin(struct S *s, int cond) +{ + if (cond) + f1(); + f3(s); +} diff --git a/gcc/tree-inline.c b/gcc/tree-inline.c index 815d88af066..9c560b1056c 100644 --- a/gcc/tree-inline.c +++ b/gcc/tree-inline.c @@ -311,17 +311,7 @@ remap_decl (tree decl, copy_body_data *id) && (TREE_CODE (t) == VAR_DECL || TREE_CODE (t) == RESULT_DECL || TREE_CODE (t) == PARM_DECL)) { - tree def = gimple_default_def (id->src_cfun, decl); get_var_ann (t); - if (TREE_CODE (decl) != PARM_DECL && def) - { - tree map = remap_ssa_name (def, id); - /* Watch out RESULT_DECLs whose SSA names map directly - to them. */ - if (TREE_CODE (map) == SSA_NAME - && gimple_nop_p (SSA_NAME_DEF_STMT (map))) - set_default_def (t, map); - } add_referenced_var (t); } return t; -- 2.30.2