aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorPaolo Carlini <paolo@gcc.gnu.org>2012-05-26 21:20:38 +0000
committerPaolo Carlini <paolo@gcc.gnu.org>2012-05-26 21:20:38 +0000
commit982058cbc9f010dbeac4f332db22eb9d1b8bc9f8 (patch)
tree2a3c54288704b989872ce1caac33fd1418fc4a35 /gcc
parent1f37c58399cc1cd5047b8464f09b9af750f129af (diff)
downloadgcc-982058cbc9f010dbeac4f332db22eb9d1b8bc9f8.zip
gcc-982058cbc9f010dbeac4f332db22eb9d1b8bc9f8.tar.gz
gcc-982058cbc9f010dbeac4f332db22eb9d1b8bc9f8.tar.bz2
re PR c++/53491 (ICE in build_target_expr_with_type, at cp/tree.c:587)
/cp 2012-05-26 Paolo Carlini <paolo.carlini@oracle.com> PR c++/53491 * tree.c (stabilize_expr): Handle exp of void type. /testsuite 2012-05-26 Paolo Carlini <paolo.carlini@oracle.com> PR c++/53491 * g++.dg/parse/crash60.C: New. From-SVN: r187917
Diffstat (limited to 'gcc')
-rw-r--r--gcc/cp/ChangeLog5
-rw-r--r--gcc/cp/tree.c5
-rw-r--r--gcc/testsuite/ChangeLog7
-rw-r--r--gcc/testsuite/g++.dg/parse/crash60.C14
4 files changed, 30 insertions, 1 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog
index 2bf548d..7cc173b 100644
--- a/gcc/cp/ChangeLog
+++ b/gcc/cp/ChangeLog
@@ -1,3 +1,8 @@
+2012-05-26 Paolo Carlini <paolo.carlini@oracle.com>
+
+ PR c++/53491
+ * tree.c (stabilize_expr): Handle exp of void type.
+
2012-05-26 Jason Merrill <jason@redhat.com>
PR c++/53220
diff --git a/gcc/cp/tree.c b/gcc/cp/tree.c
index 7c59105..236180d 100644
--- a/gcc/cp/tree.c
+++ b/gcc/cp/tree.c
@@ -3281,6 +3281,11 @@ stabilize_expr (tree exp, tree* initp)
if (!TREE_SIDE_EFFECTS (exp))
init_expr = NULL_TREE;
+ else if (VOID_TYPE_P (TREE_TYPE (exp)))
+ {
+ *initp = exp;
+ return void_zero_node;
+ }
/* There are no expressions with REFERENCE_TYPE, but there can be call
arguments with such a type; just treat it as a pointer. */
else if (TREE_CODE (TREE_TYPE (exp)) == REFERENCE_TYPE
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 5b3df36..95136c9 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,4 +1,9 @@
-2012-05-22 Jason Merrill <jason@redhat.com>
+2012-05-26 Paolo Carlini <paolo.carlini@oracle.com>
+
+ PR c++/53491
+ * g++.dg/parse/crash60.C: New.
+
+2012-05-26 Jason Merrill <jason@redhat.com>
PR c++/53220
* c-c++-common/array-lit.c: New.
diff --git a/gcc/testsuite/g++.dg/parse/crash60.C b/gcc/testsuite/g++.dg/parse/crash60.C
new file mode 100644
index 0000000..e515396
--- /dev/null
+++ b/gcc/testsuite/g++.dg/parse/crash60.C
@@ -0,0 +1,14 @@
+// PR c++/53491
+
+struct M
+{
+ void pop();
+};
+
+void foo()
+{
+ int result = 0;
+ M m;
+
+ result += m.pop(); // { dg-error "invalid operands|in evaluation" }
+}