PR tree-optimization/33735
PR tree-optimization/33572
* tree-inline.c (update_ssa_across_abnormal_edges): Revert
2007-10-09's change.
* except.c (duplicate_eh_regions): Don't look for prev_try
beyond ERT_ALLOWED_EXCEPTIONS with an empty list.
gcc/testsuite/ChangeLog:
PR tree-optimization/33735
* g++.dg/torture/pr33735.C: New.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@129356
138bc75d-0d04-0410-961f-
82ee72b054a4
2007-10-15 Alexandre Oliva <aoliva@redhat.com>
2007-10-15 Alexandre Oliva <aoliva@redhat.com>
+ PR tree-optimization/33735
+ PR tree-optimization/33572
+ * tree-inline.c (update_ssa_across_abnormal_edges): Revert
+ 2007-10-09's change.
+ * except.c (duplicate_eh_regions): Don't look for prev_try
+ beyond ERT_ALLOWED_EXCEPTIONS with an empty list.
+
+2007-10-15 Alexandre Oliva <aoliva@redhat.com>
+
PR middle-end/33706
* tree-inline.c (copy_bb): Use bsi_replace to replace a
__builtin_va_arg_pack-containing call stmt.
PR middle-end/33706
* tree-inline.c (copy_bb): Use bsi_replace to replace a
__builtin_va_arg_pack-containing call stmt.
for (prev_try = VEC_index (eh_region, cfun->eh->region_array, outer_region);
prev_try && prev_try->type != ERT_TRY;
prev_try = prev_try->outer)
for (prev_try = VEC_index (eh_region, cfun->eh->region_array, outer_region);
prev_try && prev_try->type != ERT_TRY;
prev_try = prev_try->outer)
- if (prev_try->type == ERT_MUST_NOT_THROW)
+ if (prev_try->type == ERT_MUST_NOT_THROW
+ || (prev_try->type == ERT_ALLOWED_EXCEPTIONS
+ && !prev_try->u.allowed.type_list))
{
prev_try = NULL;
break;
{
prev_try = NULL;
break;
2007-10-15 Alexandre Oliva <aoliva@redhat.com>
2007-10-15 Alexandre Oliva <aoliva@redhat.com>
+ PR tree-optimization/33735
+ * g++.dg/torture/pr33735.C: New.
+
+2007-10-15 Alexandre Oliva <aoliva@redhat.com>
+
PR middle-end/33706
* gcc.dg/va-arg-pack-2.c: New.
PR middle-end/33706
* gcc.dg/va-arg-pack-2.c: New.
--- /dev/null
+// { dg-do compile }
+#include <string>
+typedef struct _ts { } PyThreadState;
+PyThreadState * Py_NewInterpreter(void);
+void Py_EndInterpreter(PyThreadState *);
+class ApplicationError {
+public:
+ ApplicationError(std::string errormsg) : errormsg(errormsg) { }
+ std::string errormsg;
+};
+void run()
+{
+ PyThreadState *py_state=__null;
+ try {
+ if (!(py_state=Py_NewInterpreter()))
+ throw ApplicationError("error");
+ }
+ catch(ApplicationError e) {
+ Py_EndInterpreter(py_state);
+ }
+}
}
re = find_edge (ret_bb, e->dest);
}
re = find_edge (ret_bb, e->dest);
gcc_assert ((re->flags & (EDGE_EH | EDGE_ABNORMAL))
== (e->flags & (EDGE_EH | EDGE_ABNORMAL)));
gcc_assert ((re->flags & (EDGE_EH | EDGE_ABNORMAL))
== (e->flags & (EDGE_EH | EDGE_ABNORMAL)));