Author: rsmith Date: Tue Oct 18 15:27:16 2016 New Revision: 284530 URL: http://llvm.org/viewvc/llvm-project?rev=284530&view=rev Log: Add missing warning for use of C++1z init-statements in C++14 and before.
Added: cfe/trunk/test/SemaCXX/warn-c++1z-extensions.cpp Modified: cfe/trunk/include/clang/Basic/DiagnosticParseKinds.td cfe/trunk/lib/Parse/ParseExprCXX.cpp Modified: cfe/trunk/include/clang/Basic/DiagnosticParseKinds.td URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Basic/DiagnosticParseKinds.td?rev=284530&r1=284529&r2=284530&view=diff ============================================================================== --- cfe/trunk/include/clang/Basic/DiagnosticParseKinds.td (original) +++ cfe/trunk/include/clang/Basic/DiagnosticParseKinds.td Tue Oct 18 15:27:16 2016 @@ -521,6 +521,12 @@ def ext_constexpr_if : ExtWarn< def warn_cxx14_compat_constexpr_if : Warning< "constexpr if is incompatible with C++ standards before C++1z">, DefaultIgnore, InGroup<CXXPre1zCompat>; +def ext_init_statement : ExtWarn< + "'%select{if|switch}0' initialization statements are a C++1z extension">, + InGroup<CXX1z>; +def warn_cxx14_compat_init_statement : Warning< + "%select{if|switch}0 initialization statements are incompatible with " + "C++ standards before C++1z">, DefaultIgnore, InGroup<CXXPre1zCompat>; // C++ derived classes def err_dup_virtual : Error<"duplicate 'virtual' in base specifier">; Modified: cfe/trunk/lib/Parse/ParseExprCXX.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Parse/ParseExprCXX.cpp?rev=284530&r1=284529&r2=284530&view=diff ============================================================================== --- cfe/trunk/lib/Parse/ParseExprCXX.cpp (original) +++ cfe/trunk/lib/Parse/ParseExprCXX.cpp Tue Oct 18 15:27:16 2016 @@ -1787,6 +1787,10 @@ Sema::ConditionResult Parser::ParseCXXCo } case ConditionOrInitStatement::InitStmtDecl: { + Diag(Tok.getLocation(), getLangOpts().CPlusPlus1z + ? diag::warn_cxx14_compat_init_statement + : diag::ext_init_statement) + << (CK == Sema::ConditionKind::Switch); SourceLocation DeclStart = Tok.getLocation(), DeclEnd; DeclGroupPtrTy DG = ParseSimpleDeclaration( Declarator::InitStmtContext, DeclEnd, attrs, /*RequireSemi=*/true); Added: cfe/trunk/test/SemaCXX/warn-c++1z-extensions.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/SemaCXX/warn-c%2B%2B1z-extensions.cpp?rev=284530&view=auto ============================================================================== --- cfe/trunk/test/SemaCXX/warn-c++1z-extensions.cpp (added) +++ cfe/trunk/test/SemaCXX/warn-c++1z-extensions.cpp Tue Oct 18 15:27:16 2016 @@ -0,0 +1,8 @@ +// RUN: %clang_cc1 -fsyntax-only -std=c++14 -verify %s + +void f() { + if (bool b = true; b) {} // expected-warning {{'if' initialization statements are a C++1z extension}} + switch (int n = 5; n) { // expected-warning {{'switch' initialization statements are a C++1z extension}} + case 5: break; + } +} _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits