[C++ Patch] PR 53491
Paolo Carlini
paolo.carlini@oracle.com
Sat May 26 15:32:00 GMT 2012
On 05/26/2012 04:21 PM, Jason Merrill wrote:
> I think I would rather fix stabilize_expr to handle void arguments
> properly: basically just stick the whole argument in *initp and return
> void_zero_node.
Ok. Like this it works, if I understand your suggestion.
Thanks,
Paolo.
////////////////////
-------------- next part --------------
/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.
-------------- next part --------------
Index: testsuite/g++.dg/parse/crash60.C
===================================================================
--- testsuite/g++.dg/parse/crash60.C (revision 0)
+++ testsuite/g++.dg/parse/crash60.C (revision 0)
@@ -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" }
+}
Index: cp/tree.c
===================================================================
--- cp/tree.c (revision 187915)
+++ cp/tree.c (working copy)
@@ -3279,7 +3279,12 @@ stabilize_expr (tree exp, tree* initp)
{
tree init_expr;
- if (!TREE_SIDE_EFFECTS (exp))
+ if (VOID_TYPE_P (TREE_TYPE (exp)))
+ {
+ *initp = exp;
+ return void_zero_node;
+ }
+ else if (!TREE_SIDE_EFFECTS (exp))
init_expr = NULL_TREE;
/* There are no expressions with REFERENCE_TYPE, but there can be call
arguments with such a type; just treat it as a pointer. */
More information about the Gcc-patches
mailing list