On Wed, Mar 21, 2012 at 9:45 AM, Fariborz Jahanian <[email protected]>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.
_______________________________________________ cfe-commits mailing list [email protected] http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits
