aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorAndrew Pinski <pinskia@physics.uc.edu>2004-10-11 03:16:47 +0000
committerAndrew Pinski <pinskia@gcc.gnu.org>2004-10-10 20:16:47 -0700
commitb187901efacd685b07dc020ad8c47c73bd0da647 (patch)
treeb070f35d5388bd4b6ba19d422c594efdb733d896 /gcc
parent90d82a979d9e3f466d6777e6f594db69661b1caa (diff)
downloadgcc-b187901efacd685b07dc020ad8c47c73bd0da647.zip
gcc-b187901efacd685b07dc020ad8c47c73bd0da647.tar.gz
gcc-b187901efacd685b07dc020ad8c47c73bd0da647.tar.bz2
re PR c++/17907 (ice in optimize_inline_calls, at tree-inline.c)
2004-10-10 Andrew Pinski <pinskia@physics.uc.edu> PR c++/17907 * semantics.c (add_decl_expr): If the decl has a size which has side effects then the decl expression needs a cleanup point. 2004-10-10 Andrew Pinski <pinskia@physics.uc.edu> PR c++/17907 * g++.dg/eh/cleanup5.C: New test. From-SVN: r88867
Diffstat (limited to 'gcc')
-rw-r--r--gcc/cp/ChangeLog6
-rw-r--r--gcc/cp/semantics.c3
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/g++.dg/eh/cleanup5.C16
4 files changed, 29 insertions, 1 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog
index 65abf7d..d6aca57 100644
--- a/gcc/cp/ChangeLog
+++ b/gcc/cp/ChangeLog
@@ -1,3 +1,9 @@
+2004-10-10 Andrew Pinski <pinskia@physics.uc.edu>
+
+ PR c++/17907
+ * semantics.c (add_decl_expr): If the decl has a size which
+ has side effects then the decl expression needs a cleanup point.
+
2004-10-10 Mark Mitchell <mark@codesourcery.com>
PR c++/17393
diff --git a/gcc/cp/semantics.c b/gcc/cp/semantics.c
index 124af39..45912c1 100644
--- a/gcc/cp/semantics.c
+++ b/gcc/cp/semantics.c
@@ -368,7 +368,8 @@ void
add_decl_expr (tree decl)
{
tree r = build_stmt (DECL_EXPR, decl);
- if (DECL_INITIAL (decl))
+ if (DECL_INITIAL (decl)
+ || (DECL_SIZE (decl) && TREE_SIDE_EFFECTS (DECL_SIZE (decl))))
r = maybe_cleanup_point_expr (r);
add_stmt (r);
}
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index d17818f..ac9574d 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,8 @@
+2004-10-10 Andrew Pinski <pinskia@physics.uc.edu>
+
+ PR c++/17907
+ * g++.dg/eh/cleanup5.C: New test.
+
2004-10-10 Mark Mitchell <mark@codesourcery.com>
PR c++/17393
diff --git a/gcc/testsuite/g++.dg/eh/cleanup5.C b/gcc/testsuite/g++.dg/eh/cleanup5.C
new file mode 100644
index 0000000..b78c73a
--- /dev/null
+++ b/gcc/testsuite/g++.dg/eh/cleanup5.C
@@ -0,0 +1,16 @@
+// PR 17907
+// { dg-do compile }
+// We lost a CLEANUP_POINT_EXPR, leading to a crash destroying temp of A.
+
+
+struct String {
+ ~String();
+ int size() const;
+};
+struct CodingSystem {
+ String convertOut() const;
+};
+void inputOpened(CodingSystem *outputCodingSystem)
+{
+ char filePath[outputCodingSystem->convertOut().size()];
+}