<div class="gmail_quote">On Wed, Mar 21, 2012 at 9:45 AM, Fariborz Jahanian <span dir="ltr"><<a href="mailto:fjahanian@apple.com">fjahanian@apple.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
Author: fjahanian<br>
Date: Wed Mar 21 11:45:13 2012<br>
New Revision: 153200<br>
<br>
URL: <a href="http://llvm.org/viewvc/llvm-project?rev=153200&view=rev" target="_blank">http://llvm.org/viewvc/llvm-project?rev=153200&view=rev</a><br>
Log:<br>
Allow void blocks to return witn a void expression in<br>
c-mode to match behavior with void functions in c. Issue<br>
warning with -pedantic. // rdar://11069896<br>
<br>
Modified:<br>
    cfe/trunk/include/clang/Basic/DiagnosticSemaKinds.td<br>
    cfe/trunk/lib/Sema/SemaStmt.cpp<br>
    cfe/trunk/test/Sema/block-return.c<br>
<br>
Modified: cfe/trunk/include/clang/Basic/DiagnosticSemaKinds.td<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Basic/DiagnosticSemaKinds.td?rev=153200&r1=153199&r2=153200&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Basic/DiagnosticSemaKinds.td?rev=153200&r1=153199&r2=153200&view=diff</a><br>

==============================================================================<br>
--- cfe/trunk/include/clang/Basic/DiagnosticSemaKinds.td (original)<br>
+++ cfe/trunk/include/clang/Basic/DiagnosticSemaKinds.td Wed Mar 21 11:45:13 2012<br>
@@ -5159,7 +5159,7 @@<br>
   "should not return a value">,<br>
   DefaultError, InGroup<ReturnType>;<br>
 def ext_return_has_void_expr : Extension<<br>
-  "void %select{function|method}1 %0 should not return void expression">;<br>
+  "void %select{function|method|block}1 %0 should not return void expression">;<br>
 def err_return_init_list : Error<<br>
   "%select{void function|void method|constructor|destructor}1 %0 "<br>
   "must not return a value">;<br>
<br>
Modified: cfe/trunk/lib/Sema/SemaStmt.cpp<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Sema/SemaStmt.cpp?rev=153200&r1=153199&r2=153200&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Sema/SemaStmt.cpp?rev=153200&r1=153199&r2=153200&view=diff</a><br>

==============================================================================<br>
--- cfe/trunk/lib/Sema/SemaStmt.cpp (original)<br>
+++ cfe/trunk/lib/Sema/SemaStmt.cpp Wed Mar 21 11:45:13 2012<br>
@@ -1886,8 +1886,13 @@<br>
         !(getLangOpts().CPlusPlus &&<br>
           (RetValExp->isTypeDependent() ||<br>
            RetValExp->getType()->isVoidType()))) {<br>
-      Diag(ReturnLoc, diag::err_return_block_has_expr);<br>
-      RetValExp = 0;<br>
+      if (!getLangOpts().CPlusPlus &&<br>
+          RetValExp->getType()->isVoidType())<br>
+        Diag(ReturnLoc, diag::ext_return_has_void_expr) << "" << 2;<br>
+      else {<br>
+        Diag(ReturnLoc, diag::err_return_block_has_expr);<br>
+        RetValExp = 0;<br>
+      }<br>
     }<br>
   } else if (!RetValExp) {<br>
     return StmtError(Diag(ReturnLoc, diag::err_block_return_missing_expr));<br>
<br>
Modified: cfe/trunk/test/Sema/block-return.c<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Sema/block-return.c?rev=153200&r1=153199&r2=153200&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Sema/block-return.c?rev=153200&r1=153199&r2=153200&view=diff</a><br>

==============================================================================<br>
--- cfe/trunk/test/Sema/block-return.c (original)<br>
+++ cfe/trunk/test/Sema/block-return.c Wed Mar 21 11:45:13 2012<br>
@@ -1,4 +1,4 @@<br>
-// RUN: %clang_cc1 -fsyntax-only %s -verify -fblocks<br>
+// RUN: %clang_cc1 -pedantic -fsyntax-only %s -verify -fblocks<br>
<br>
 typedef void (^CL)(void);<br>
<br>
@@ -130,4 +130,7 @@<br>
   int (^NN) (void)  = ^{ return cint; };<br>
 }<br>
<br>
-<br>
+// rdar://11069896<br>
+void (^blk)(void) = ^{<br>
+    return (void)0; // expected-warning {{void block  should not return void expression}}<br>
+};<br></blockquote></div><br><div>The empty %0 has left two spaces in a row in this warning.</div>