OSDN Git Service

PR c/19771
authorjsm28 <jsm28@138bc75d-0d04-0410-961f-82ee72b054a4>
Sun, 19 Apr 2009 20:19:54 +0000 (20:19 +0000)
committerjsm28 <jsm28@138bc75d-0d04-0410-961f-82ee72b054a4>
Sun, 19 Apr 2009 20:19:54 +0000 (20:19 +0000)
* c-semantics.c (pop_stmt_list): Propagate
STATEMENT_LIST_HAS_LABEL to parent statement list.

testsuite:
* gcc.c-torture/execute/vla-dealloc-1.c: New test.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@146358 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/ChangeLog
gcc/c-semantics.c
gcc/testsuite/ChangeLog
gcc/testsuite/gcc.c-torture/execute/vla-dealloc-1.c [new file with mode: 0644]

index a7dcc8e..01488bf 100644 (file)
@@ -1,3 +1,9 @@
+2009-04-19  Joseph Myers  <joseph@codesourcery.com>
+
+       PR c/19771
+       * c-semantics.c (pop_stmt_list): Propagate
+       STATEMENT_LIST_HAS_LABEL to parent statement list.
+
 2009-04-19  Adam Nemet  <anemet@caviumnetworks.com>
 
        * config/mips/mips.h (mips_tune_attr): New macro.
index 3c7b241..b6c3a27 100644 (file)
@@ -70,6 +70,8 @@ pop_stmt_list (tree t)
     {
       chain = TREE_CHAIN (u);
       TREE_CHAIN (u) = NULL_TREE;
+      if (chain)
+       STATEMENT_LIST_HAS_LABEL (chain) |= STATEMENT_LIST_HAS_LABEL (u);
       if (t == u)
        break;
       u = chain;
index fd41b32..a3e266b 100644 (file)
@@ -1,5 +1,10 @@
 2009-04-19  Joseph Myers  <joseph@codesourcery.com>
 
+       PR c/19771
+       * gcc.c-torture/execute/vla-dealloc-1.c: New test.
+
+2009-04-19  Joseph Myers  <joseph@codesourcery.com>
+
        PR c/38243
        * gcc.dg/c99-restrict-3.c: New test.
 
diff --git a/gcc/testsuite/gcc.c-torture/execute/vla-dealloc-1.c b/gcc/testsuite/gcc.c-torture/execute/vla-dealloc-1.c
new file mode 100644 (file)
index 0000000..f2291ad
--- /dev/null
@@ -0,0 +1,22 @@
+/* VLAs should be deallocated on a jump to before their definition,
+   including a jump to a label in an inner scope.  PR 19771.  */
+
+void *volatile p;
+
+int
+main (void)
+{
+  int n = 0;
+  if (0)
+    {
+    lab:;
+    }
+  int x[n % 1000 + 1];
+  x[0] = 1;
+  x[n % 1000] = 2;
+  p = x;
+  n++;
+  if (n < 1000000)
+    goto lab;
+  return 0;
+}