[cfe-commits] r153200 - in /cfe/trunk: include/clang/Basic/DiagnosticSemaKinds.td lib/Sema/SemaStmt.cpp test/Sema/block-return.c
Richard Smith
richard at metafoo.co.uk
Wed Mar 21 11:45:49 PDT 2012
On Wed, Mar 21, 2012 at 9:45 AM, Fariborz Jahanian <fjahanian at apple.com>wrote:
> Author: fjahanian
> Date: Wed Mar 21 11:45:13 2012
> New Revision: 153200
>
> URL: http://llvm.org/viewvc/llvm-project?rev=153200&view=rev
> Log:
> Allow void blocks to return witn a void expression in
> c-mode to match behavior with void functions in c. Issue
> warning with -pedantic. // rdar://11069896
>
> Modified:
> cfe/trunk/include/clang/Basic/DiagnosticSemaKinds.td
> cfe/trunk/lib/Sema/SemaStmt.cpp
> cfe/trunk/test/Sema/block-return.c
>
> Modified: cfe/trunk/include/clang/Basic/DiagnosticSemaKinds.td
> URL:
> http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Basic/DiagnosticSemaKinds.td?rev=153200&r1=153199&r2=153200&view=diff
>
> ==============================================================================
> --- cfe/trunk/include/clang/Basic/DiagnosticSemaKinds.td (original)
> +++ cfe/trunk/include/clang/Basic/DiagnosticSemaKinds.td Wed Mar 21
> 11:45:13 2012
> @@ -5159,7 +5159,7 @@
> "should not return a value">,
> DefaultError, InGroup<ReturnType>;
> def ext_return_has_void_expr : Extension<
> - "void %select{function|method}1 %0 should not return void expression">;
> + "void %select{function|method|block}1 %0 should not return void
> expression">;
> def err_return_init_list : Error<
> "%select{void function|void method|constructor|destructor}1 %0 "
> "must not return a value">;
>
> Modified: cfe/trunk/lib/Sema/SemaStmt.cpp
> URL:
> http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Sema/SemaStmt.cpp?rev=153200&r1=153199&r2=153200&view=diff
>
> ==============================================================================
> --- cfe/trunk/lib/Sema/SemaStmt.cpp (original)
> +++ cfe/trunk/lib/Sema/SemaStmt.cpp Wed Mar 21 11:45:13 2012
> @@ -1886,8 +1886,13 @@
> !(getLangOpts().CPlusPlus &&
> (RetValExp->isTypeDependent() ||
> RetValExp->getType()->isVoidType()))) {
> - Diag(ReturnLoc, diag::err_return_block_has_expr);
> - RetValExp = 0;
> + if (!getLangOpts().CPlusPlus &&
> + RetValExp->getType()->isVoidType())
> + Diag(ReturnLoc, diag::ext_return_has_void_expr) << "" << 2;
> + else {
> + Diag(ReturnLoc, diag::err_return_block_has_expr);
> + RetValExp = 0;
> + }
> }
> } else if (!RetValExp) {
> return StmtError(Diag(ReturnLoc, diag::err_block_return_missing_expr));
>
> Modified: cfe/trunk/test/Sema/block-return.c
> URL:
> http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Sema/block-return.c?rev=153200&r1=153199&r2=153200&view=diff
>
> ==============================================================================
> --- cfe/trunk/test/Sema/block-return.c (original)
> +++ cfe/trunk/test/Sema/block-return.c Wed Mar 21 11:45:13 2012
> @@ -1,4 +1,4 @@
> -// RUN: %clang_cc1 -fsyntax-only %s -verify -fblocks
> +// RUN: %clang_cc1 -pedantic -fsyntax-only %s -verify -fblocks
>
> typedef void (^CL)(void);
>
> @@ -130,4 +130,7 @@
> int (^NN) (void) = ^{ return cint; };
> }
>
> -
> +// rdar://11069896
> +void (^blk)(void) = ^{
> + return (void)0; // expected-warning {{void block should not return
> void expression}}
> +};
>
The empty %0 has left two spaces in a row in this warning.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20120321/ff8353c1/attachment.html>
More information about the cfe-commits
mailing list