Author: rsmith Date: Mon Nov 28 19:35:17 2016 New Revision: 288097 URL: http://llvm.org/viewvc/llvm-project?rev=288097&view=rev Log: Add a warning for 'main' returning 'true' or 'false'.
Patch by Joshua Hurwitz! Added: cfe/trunk/test/Sema/warn-main-returns-bool-literal.cpp Modified: cfe/trunk/include/clang/Basic/DiagnosticSemaKinds.td cfe/trunk/lib/Sema/SemaStmt.cpp Modified: cfe/trunk/include/clang/Basic/DiagnosticSemaKinds.td URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Basic/DiagnosticSemaKinds.td?rev=288097&r1=288096&r2=288097&view=diff ============================================================================== --- cfe/trunk/include/clang/Basic/DiagnosticSemaKinds.td (original) +++ cfe/trunk/include/clang/Basic/DiagnosticSemaKinds.td Mon Nov 28 19:35:17 2016 @@ -646,6 +646,8 @@ def warn_main_one_arg : Warning<"only on def err_main_arg_wrong : Error<"%select{first|second|third|fourth}0 " "parameter of 'main' (%select{argument count|argument array|environment|" "platform-specific data}0) must be of type %1">; +def warn_main_returns_bool_literal : Warning<"bool literal returned from " + "'main'">, InGroup<Main>; def err_main_global_variable : Error<"main cannot be declared as global variable">; def warn_main_redefined : Warning<"variable named 'main' with external linkage " Modified: cfe/trunk/lib/Sema/SemaStmt.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Sema/SemaStmt.cpp?rev=288097&r1=288096&r2=288097&view=diff ============================================================================== --- cfe/trunk/lib/Sema/SemaStmt.cpp (original) +++ cfe/trunk/lib/Sema/SemaStmt.cpp Mon Nov 28 19:35:17 2016 @@ -3193,6 +3193,10 @@ StmtResult Sema::BuildReturnStmt(SourceL if (FD->isNoReturn()) Diag(ReturnLoc, diag::warn_noreturn_function_has_return_expr) << FD->getDeclName(); + if (FD->isMain() && RetValExp) + if (isa<CXXBoolLiteralExpr>(RetValExp)) + Diag(ReturnLoc, diag::warn_main_returns_bool_literal) + << RetValExp->getSourceRange(); } else if (ObjCMethodDecl *MD = getCurMethodDecl()) { FnRetType = MD->getReturnType(); isObjCMethod = true; Added: cfe/trunk/test/Sema/warn-main-returns-bool-literal.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Sema/warn-main-returns-bool-literal.cpp?rev=288097&view=auto ============================================================================== --- cfe/trunk/test/Sema/warn-main-returns-bool-literal.cpp (added) +++ cfe/trunk/test/Sema/warn-main-returns-bool-literal.cpp Mon Nov 28 19:35:17 2016 @@ -0,0 +1,20 @@ +// RUN: %clang_cc1 -std=c++11 -fsyntax-only -Wmain -verify %s + +// expected-note@+1 {{previous definition is here}} +int main() { + return 0; +} // no-warning + +// expected-error@+1 {{redefinition of 'main'}} +int main() { + return 1.0; +} // no-warning + +int main() { + bool b = true; + return b; // no-warning +} + +int main() { + return true; // expected-warning {{bool literal returned from 'main'}} +} _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits