r284530 - Add missing warning for use of C++1z init-statements in C++14 and before.
Richard Smith via cfe-commits
cfe-commits at lists.llvm.org
Tue Oct 18 13:27:17 PDT 2016
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;
+ }
+}
More information about the cfe-commits
mailing list