===================================================================
@@ -1,3 +1,10 @@
+2011-01-19 Nicola Pero <nicola.pero@meta-innovation.com>
+
+ PR c/43082
+ * c-typeck.c (c_objc_common_truthvalue_conversion): If we are
+ passed a VOID_TYPE expression, immediately emit an error and
+ return error_mark_node.
+
2011-01-18 Eric Botcazou <ebotcazou@adacore.com>
PR middle-end/46894
===================================================================
@@ -0,0 +1,10 @@
+/* Test that the compiler does not crash when void expressions are
+ found inside conditional expressions. PR c/43082. */
+/* { dg-do compile } */
+
+void
+foo (int x)
+{
+ if (x ? (void)(0) : (void)(1)) /* { dg-error "void value not ignored as it ought to be" } */
+ ;
+}
===================================================================
@@ -1,3 +1,9 @@
+2011-01-18 Nicola Pero <nicola.pero@meta-innovation.com>
+ Andrew Pinski <pinskia@gmail.com>
+
+ PR c/43082
+ * gcc.dg/pr43082.c: New.
+
2011-01-18 Dominique d'Humieres <dominiq@lps.ens.fr>
PR testsuite/41146
===================================================================
@@ -10270,6 +10270,10 @@ c_objc_common_truthvalue_conversion (location_t lo
error_at (location, "used union type value where scalar is required");
return error_mark_node;
+ case VOID_TYPE:
+ error_at (location, "void value not ignored as it ought to be");
+ return error_mark_node;
+
case FUNCTION_TYPE:
gcc_unreachable ();
@@ -10282,8 +10286,8 @@ c_objc_common_truthvalue_conversion (location_t lo
if (int_operands)
expr = remove_c_maybe_const_expr (expr);
- /* ??? Should we also give an error for void and vectors rather than
- leaving those to give errors later? */
+ /* ??? Should we also give an error for vectors rather than leaving
+ those to give errors later? */
expr = c_common_truthvalue_conversion (location, expr);
if (TREE_CODE (expr) == INTEGER_CST && int_operands && !int_const)