From 0891f4f905496014f6c6ff18c26ca0429177a6e4 Mon Sep 17 00:00:00 2001 From: jakub Date: Wed, 8 Jan 2014 18:41:22 +0000 Subject: [PATCH] PR ipa/59722 * ipa-prop.c (ipa_analyze_params_uses): Ignore uses in debug stmts. * gcc.dg/pr59722.c: New test. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@206438 138bc75d-0d04-0410-961f-82ee72b054a4 --- gcc/ChangeLog | 5 +++++ gcc/ipa-prop.c | 7 +++++-- gcc/testsuite/ChangeLog | 5 +++++ gcc/testsuite/gcc.dg/pr59722.c | 36 ++++++++++++++++++++++++++++++++++++ 4 files changed, 51 insertions(+), 2 deletions(-) create mode 100644 gcc/testsuite/gcc.dg/pr59722.c diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 7c1edb58dea..89aa4002e3e 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,8 @@ +2014-01-08 Jakub Jelinek + + PR ipa/59722 + * ipa-prop.c (ipa_analyze_params_uses): Ignore uses in debug stmts. + 2014-01-08 Bernd Edlinger PR middle-end/57748 diff --git a/gcc/ipa-prop.c b/gcc/ipa-prop.c index 786a96f8d33..af2e22392b0 100644 --- a/gcc/ipa-prop.c +++ b/gcc/ipa-prop.c @@ -2127,8 +2127,11 @@ ipa_analyze_params_uses (struct cgraph_node *node, FOR_EACH_IMM_USE_FAST (use_p, imm_iter, ddef) if (!is_gimple_call (USE_STMT (use_p))) { - controlled_uses = IPA_UNDESCRIBED_USE; - break; + if (!is_gimple_debug (USE_STMT (use_p))) + { + controlled_uses = IPA_UNDESCRIBED_USE; + break; + } } else controlled_uses++; diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 827b482c55c..4a7b63c3008 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2014-01-08 Jakub Jelinek + + PR ipa/59722 + * gcc.dg/pr59722.c: New test. + 2014-01-08 Bernd Edlinger PR middle-end/57748 diff --git a/gcc/testsuite/gcc.dg/pr59722.c b/gcc/testsuite/gcc.dg/pr59722.c new file mode 100644 index 00000000000..7626fd22e1d --- /dev/null +++ b/gcc/testsuite/gcc.dg/pr59722.c @@ -0,0 +1,36 @@ +/* PR ipa/59722 */ +/* { dg-do compile } */ +/* { dg-options "-O2 -fcompare-debug" } */ + +extern void abrt (const char *, int) __attribute__((noreturn)); +void baz (int *, int *); + +static inline int +bar (void) +{ + return 1; +} + +static inline void +foo (int *x, int y (void)) +{ + while (1) + { + int a = 0; + if (*x) + { + baz (x, &a); + while (a && !y ()) + ; + break; + } + abrt ("", 1); + } +} + +void +test (int x) +{ + foo (&x, bar); + foo (&x, bar); +} -- 2.11.4.GIT