]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
In gcc/: 2011-01-26 Nicola Pero <nicola.pero@meta-innovation.com>
authorNicola Pero <nicola.pero@meta-innovation.com>
Thu, 27 Jan 2011 02:09:13 +0000 (02:09 +0000)
committerNicola Pero <nicola@gcc.gnu.org>
Thu, 27 Jan 2011 02:09:13 +0000 (02:09 +0000)
In gcc/:
2011-01-26  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.

In gcc/testsuite/:
2011-01-26  Nicola Pero  <nicola.pero@meta-innovation.com>
    Andrew Pinski  <pinskia@gmail.com>

PR c/43082
* gcc.dg/pr43082.c: New.

Co-Authored-By: Andrew Pinski <pinskia@gmail.com>
From-SVN: r169319

gcc/ChangeLog
gcc/c-typeck.c
gcc/testsuite/ChangeLog
gcc/testsuite/gcc.dg/pr43082.c [new file with mode: 0644]

index 35e555b71a5715303b8e647515df4cf653c332a0..c0389d48b95c7748955b4dad24824f999ad11b5e 100644 (file)
@@ -1,3 +1,10 @@
+2011-01-26  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-26  Jeff Law  <law@redhat.com>
 
        PR rtl-optimization/47464
index 689423ea0281e31544eb978a606949015c93e968..a22bb737533affc203de69609b7a860e4b4ca449 100644 (file)
@@ -10270,6 +10270,10 @@ c_objc_common_truthvalue_conversion (location_t location, tree expr)
       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 location, tree expr)
   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)
index a4ed36535de4983aab37db6a3b2bc1935ae9d1e2..6835c1956afbd99681a8a40e7ff0644a8aa8377e 100644 (file)
@@ -1,3 +1,9 @@
+2011-01-26  Nicola Pero  <nicola.pero@meta-innovation.com>
+           Andrew Pinski  <pinskia@gmail.com>
+
+       PR c/43082
+       * gcc.dg/pr43082.c: New.
+
 2011-01-26  DJ Delorie  <dj@redhat.com>
 
        PR rtl-optimization/46878
diff --git a/gcc/testsuite/gcc.dg/pr43082.c b/gcc/testsuite/gcc.dg/pr43082.c
new file mode 100644 (file)
index 0000000..a6e0046
--- /dev/null
@@ -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" } */
+    ;
+}