]> gcc.gnu.org Git - gcc.git/commitdiff
re PR c++/12709 (ICE with __FUNCTION__ and function-try-block)
authorAndrew Pinski <pinskia@physics.uc.edu>
Tue, 13 Jan 2004 20:10:07 +0000 (20:10 +0000)
committerAndrew Pinski <pinskia@gcc.gnu.org>
Tue, 13 Jan 2004 20:10:07 +0000 (12:10 -0800)
2004-01-13  Andrew Pinski  <pinskia@physics.uc.edu>

        PR c++/12709
        * c-common.c (finish_fname_decls): Use the chain only if the
        tree is an expr_stmt.

2004-01-13  Andrew Pinski  <pinskia@physics.uc.edu>

        PR c++/12709
        * g++.dg/parse/try-catch-1.C: New test.

From-SVN: r75814

gcc/ChangeLog
gcc/c-common.c
gcc/testsuite/ChangeLog
gcc/testsuite/g++.dg/parse/try-catch-1.C [new file with mode: 0644]

index 408798a07144b37159e8eeca59773d465f097c70..aafb532d3ac8ee2af24a2b79a17622e8e6edec1d 100644 (file)
@@ -1,3 +1,9 @@
+2004-01-13  Andrew Pinski  <pinskia@physics.uc.edu>
+
+       PR c++/12709
+       * c-common.c (finish_fname_decls): Use the chain only if the
+       tree is an expr_stmt.
+
 2004-01-13  Vladimir Makarov  <vmakarov@redhat.com>
 
         * rtl.def: Add comment about new option in automata_option.
index e12a9c0fea840149bfe14880eb203c61f4b3e415..644511318c70709b5ff91fecdec8cf3461ce4e8b 100644 (file)
@@ -1053,7 +1053,13 @@ finish_fname_decls (void)
       tree *p = &DECL_SAVED_TREE (current_function_decl);
       /* Skip the dummy EXPR_STMT and any EH_SPEC_BLOCK.  */
       while (TREE_CODE (*p) != COMPOUND_STMT)
-       p = &TREE_CHAIN (*p);
+       {
+         if (TREE_CODE (*p) == EXPR_STMT)
+           p = &TREE_CHAIN (*p);
+         else
+           p = &TREE_OPERAND(*p, 0);
+       }
+
       p = &COMPOUND_BODY (*p);
       if (TREE_CODE (*p) == SCOPE_STMT)
        p = &TREE_CHAIN (*p);
index 426e8cac441e6ab7786913c1e94f5102aa2d27e2..7a73238f8b50ba19d43f2ca7f86e1798a9d1ad55 100644 (file)
@@ -1,3 +1,8 @@
+2004-01-13  Andrew Pinski  <pinskia@physics.uc.edu>
+
+       PR c++/12709
+       * g++.dg/parse/try-catch-1.C: New test.
+
 2004-01-13  Arnaud Charlet  <charlet@act-europe.fr>
 
        * ada/acats/run_all.sh: Add more verbose output in acats.log
diff --git a/gcc/testsuite/g++.dg/parse/try-catch-1.C b/gcc/testsuite/g++.dg/parse/try-catch-1.C
new file mode 100644 (file)
index 0000000..e4ed1ad
--- /dev/null
@@ -0,0 +1,14 @@
+// Test case from: <ncm-nospam@cantrip.org>
+// Reduced by <bangerth@dealii.org>
+// The problem was that g++ was ICE because
+// it was deferring an NULL pointer because
+// it should have been taking the operand 1
+// instead of the chain in finish_fname_decls.
+
+
+void fun()
+try
+{
+    __FUNCTION__;
+}
+catch (...) {}
This page took 0.104569 seconds and 5 git commands to generate.