2009-07-18 Richard Guenther <rguenther@suse.de>
authorrguenth <rguenth@138bc75d-0d04-0410-961f-82ee72b054a4>
Sat, 18 Jul 2009 11:16:07 +0000 (11:16 +0000)
committerrguenth <rguenth@138bc75d-0d04-0410-961f-82ee72b054a4>
Sat, 18 Jul 2009 11:16:07 +0000 (11:16 +0000)
PR c/40787
* gimplify.c (gimplify_call_expr): Reject code using results from
functions returning void.

* gcc.dg/pr35899.c: Adjust.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@149770 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/ChangeLog
gcc/gimplify.c
gcc/testsuite/ChangeLog
gcc/testsuite/gcc.dg/pr35899.c

index 43b5cc6..1c09316 100644 (file)
@@ -1,3 +1,9 @@
+2009-07-18  Richard Guenther  <rguenther@suse.de>
+
+       PR c/40787
+       * gimplify.c (gimplify_call_expr): Reject code using results from
+       functions returning void.
+
 2009-07-18  Richard Sandiford  <r.sandiford@uk.ibm.com>
 
        * doc/md.texi: Document the new PowerPC "es" constraint.
index 884d00f..dc8d0c0 100644 (file)
@@ -2411,6 +2411,14 @@ gimplify_call_expr (tree *expr_p, gimple_seq *pre_p, bool want_value)
         }
     }
 
+  /* Verify the function result.  */
+  if (want_value && fndecl
+      && VOID_TYPE_P (TREE_TYPE (TREE_TYPE (fndecl))))
+    {
+      error_at (loc, "using result of function returning %<void%>");
+      ret = GS_ERROR;
+    }
+
   /* Try this again in case gimplification exposed something.  */
   if (ret != GS_ERROR)
     {
index 5f08b2d..e13f10f 100644 (file)
@@ -1,3 +1,8 @@
+2009-07-18  Richard Guenther  <rguenther@suse.de>
+
+       PR c/40787
+       * gcc.dg/pr35899.c: Adjust.
+
 2009-07-18  Richard Sandiford  <r.sandiford@uk.ibm.com>
 
        * gcc.target/powerpc/asm-es-1.c: New test.
index 4ce4ac5..0dc4ffa 100644 (file)
@@ -5,7 +5,7 @@
 int
 foo (void)
 {
-  int a = bar ();      /* { dg-message "note: previous implicit declaration" } */
+  int a = bar ();      /* { dg-error "returning 'void'" } */
   return a;
 }
 
@@ -13,3 +13,5 @@ void
 bar (void)             /* { dg-warning "conflicting types for" } */
 {
 }
+
+/* { dg-message "note: previous implicit declaration" "" { target *-*-* } 8 } */