From 86a303ccb59c20dd6b4923c6b3c88fd6e7cd475d Mon Sep 17 00:00:00 2001 From: Jakub Jelinek Date: Thu, 7 Jul 2016 23:51:57 +0200 Subject: [PATCH] backport: re PR middle-end/71494 (label as value in nested function) Backported from mainline 2016-06-10 Jakub Jelinek PR middle-end/71494 * tree-nested.c (convert_nonlocal_reference_stmt): For GIMPLE_GOTO without LABEL_DECL, set *handled_ops_p to false instead of true. * gcc.c-torture/execute/pr71494.c: New test. From-SVN: r238143 --- gcc/ChangeLog | 6 +++++ gcc/testsuite/ChangeLog | 5 +++++ gcc/testsuite/gcc.c-torture/execute/pr71494.c | 22 +++++++++++++++++++ gcc/tree-nested.c | 2 +- 4 files changed, 34 insertions(+), 1 deletion(-) create mode 100644 gcc/testsuite/gcc.c-torture/execute/pr71494.c diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 1dbd3df30629..c8db5319f4e4 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,6 +1,12 @@ 2016-07-07 Jakub Jelinek Backported from mainline + 2016-06-10 Jakub Jelinek + + PR middle-end/71494 + * tree-nested.c (convert_nonlocal_reference_stmt): For GIMPLE_GOTO + without LABEL_DECL, set *handled_ops_p to false instead of true. + 2016-03-29 Jakub Jelinek PR rtl-optimization/70429 diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 888311c89cf0..5a7410725aad 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,6 +1,11 @@ 2016-07-07 Jakub Jelinek Backported from mainline + 2016-06-10 Jakub Jelinek + + PR middle-end/71494 + * gcc.c-torture/execute/pr71494.c: New test. + 2016-03-29 Jakub Jelinek PR rtl-optimization/70429 diff --git a/gcc/testsuite/gcc.c-torture/execute/pr71494.c b/gcc/testsuite/gcc.c-torture/execute/pr71494.c new file mode 100644 index 000000000000..f962f2c2e219 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/execute/pr71494.c @@ -0,0 +1,22 @@ +/* PR middle-end/71494 */ + +int +main () +{ + void *label = &&out; + int i = 0; + void test (void) + { + label = &&out2; + goto *label; + out2:; + i++; + } + goto *label; + out: + i += 2; + test (); + if (i != 3) + __builtin_abort (); + return 0; +} diff --git a/gcc/tree-nested.c b/gcc/tree-nested.c index 28753c16c897..5efbbc52695c 100644 --- a/gcc/tree-nested.c +++ b/gcc/tree-nested.c @@ -1313,7 +1313,7 @@ convert_nonlocal_reference_stmt (gimple_stmt_iterator *gsi, bool *handled_ops_p, { wi->val_only = true; wi->is_lhs = false; - *handled_ops_p = true; + *handled_ops_p = false; return NULL_TREE; } break; -- 2.47.2