diff options
author | Richard Guenther <rguenther@suse.de> | 2010-01-27 16:00:31 +0000 |
---|---|---|
committer | Richard Biener <rguenth@gcc.gnu.org> | 2010-01-27 16:00:31 +0000 |
commit | e87da26377c895769d3ac3706833b0f8290bebb9 (patch) | |
tree | fc5e0782fed5c9442a3c680f76f0fc402258fb5a /gcc | |
parent | 77597d3907e17a45b0d4825edb893c23a0715181 (diff) | |
download | gcc-e87da26377c895769d3ac3706833b0f8290bebb9.zip gcc-e87da26377c895769d3ac3706833b0f8290bebb9.tar.gz gcc-e87da26377c895769d3ac3706833b0f8290bebb9.tar.bz2 |
re PR tree-optimization/42878 ("-fcompare-debug failure" at -O1 (2))
2010-01-27 Richard Guenther <rguenther@suse.de>
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
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/testsuite/gcc.dg/torture/pr42878-1.c | 30 | ||||
-rw-r--r-- | gcc/testsuite/gcc.dg/torture/pr42878-2.c | 34 | ||||
-rw-r--r-- | gcc/tree-inline.c | 10 |
5 files changed, 76 insertions, 10 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 290b354..41f7bad 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2010-01-27 Richard Guenther <rguenther@suse.de> + + 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 <jakub@redhat.com> * config/rs6000/rs6000.c (TARGET_DELEGITIMIZE_ADDRESS): Redefine. diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index fd63e1b..ef9940e 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,9 @@ +2010-01-27 Richard Guenther <rguenther@suse.de> + + PR middle-end/42878 + * gcc.dg/torture/pr42878-1.c: New testcase. + * gcc.dg/torture/pr42878-2.c: Likewise. + 2010-01-27 Jakub Jelinek <jakub@redhat.com> 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 0000000..8c21f0f --- /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 0000000..67e413a --- /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 815d88a..9c560b1 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; |