P0002R1: increment on expressions of type bool is no longer allowed in C++1z.
llvm-svn: 254122
This commit is contained in:
parent
a8cfffa351
commit
4a0cd89325
|
@ -187,7 +187,8 @@ def CXX14Compat : DiagGroup<"c++14-compat", [CXXPre1zCompat]>;
|
|||
def CXX14CompatPedantic : DiagGroup<"c++14-compat-pedantic",
|
||||
[CXXPre1zCompatPedantic]>;
|
||||
|
||||
def CXX1zCompat : DiagGroup<"c++1z-compat", [DeprecatedRegister]>;
|
||||
def CXX1zCompat : DiagGroup<"c++1z-compat", [DeprecatedRegister,
|
||||
DeprecatedIncrementBool]>;
|
||||
|
||||
def : DiagGroup<"effc++">;
|
||||
def DivZero : DiagGroup<"division-by-zero">;
|
||||
|
@ -204,6 +205,7 @@ def DanglingElse: DiagGroup<"dangling-else">;
|
|||
def DanglingField : DiagGroup<"dangling-field">;
|
||||
def DistributedObjectModifiers : DiagGroup<"distributed-object-modifiers">;
|
||||
def FlagEnum : DiagGroup<"flag-enum">;
|
||||
def IncrementBool : DiagGroup<"increment-bool", [DeprecatedIncrementBool]>;
|
||||
def InfiniteRecursion : DiagGroup<"infinite-recursion">;
|
||||
def GNUImaginaryConstant : DiagGroup<"gnu-imaginary-constant">;
|
||||
def IgnoredQualifiers : DiagGroup<"ignored-qualifiers">;
|
||||
|
|
|
@ -5727,8 +5727,11 @@ def note_member_declared_here : Note<
|
|||
"member %0 declared here">;
|
||||
def err_decrement_bool : Error<"cannot decrement expression of type bool">;
|
||||
def warn_increment_bool : Warning<
|
||||
"incrementing expression of type bool is deprecated">,
|
||||
InGroup<DeprecatedIncrementBool>;
|
||||
"incrementing expression of type bool is deprecated and "
|
||||
"incompatible with C++1z">, InGroup<DeprecatedIncrementBool>;
|
||||
def ext_increment_bool : ExtWarn<
|
||||
"ISO C++1z does not allow incrementing expression of type bool">,
|
||||
DefaultError, InGroup<IncrementBool>;
|
||||
def err_increment_decrement_enum : Error<
|
||||
"cannot %select{decrement|increment}0 expression of enum type %1">;
|
||||
def err_catch_incomplete_ptr : Error<
|
||||
|
|
|
@ -9680,7 +9680,9 @@ static QualType CheckIncrementDecrementOperand(Sema &S, Expr *Op,
|
|||
return QualType();
|
||||
}
|
||||
// Increment of bool sets it to true, but is deprecated.
|
||||
S.Diag(OpLoc, diag::warn_increment_bool) << Op->getSourceRange();
|
||||
S.Diag(OpLoc, S.getLangOpts().CPlusPlus1z ? diag::ext_increment_bool
|
||||
: diag::warn_increment_bool)
|
||||
<< Op->getSourceRange();
|
||||
} else if (S.getLangOpts().CPlusPlus && ResType->isEnumeralType()) {
|
||||
// Error on enum increments and decrements in C++ mode
|
||||
S.Diag(OpLoc, diag::err_increment_decrement_enum) << IsInc << ResType;
|
||||
|
|
|
@ -524,8 +524,13 @@ namespace dr143 { // dr143: yes
|
|||
|
||||
namespace dr145 { // dr145: yes
|
||||
void f(bool b) {
|
||||
#if __cplusplus <= 201402L
|
||||
++b; // expected-warning {{deprecated}}
|
||||
b++; // expected-warning {{deprecated}}
|
||||
#else
|
||||
++b; // expected-error {{increment}}
|
||||
b++; // expected-error {{increment}}
|
||||
#endif
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -28,7 +28,19 @@ void stuff() {
|
|||
|
||||
int k = to_int(n); // no-warning
|
||||
bool b;
|
||||
++b; // expected-warning {{incrementing expression of type bool is deprecated}}
|
||||
++b;
|
||||
#if __cplusplus > 201402L
|
||||
// expected-error@-2 {{ISO C++1z does not allow incrementing expression of type bool}}
|
||||
#else
|
||||
// expected-warning@-4 {{incrementing expression of type bool is deprecated}}
|
||||
#endif
|
||||
|
||||
b++;
|
||||
#if __cplusplus > 201402L
|
||||
// expected-error@-2 {{ISO C++1z does not allow incrementing expression of type bool}}
|
||||
#else
|
||||
// expected-warning@-4 {{incrementing expression of type bool is deprecated}}
|
||||
#endif
|
||||
|
||||
char *p = "foo";
|
||||
#if __cplusplus < 201103L
|
||||
|
|
|
@ -601,7 +601,7 @@ as the draft C++1z standard evolves.</p>
|
|||
<tr>
|
||||
<td>Remove deprecated <tt>bool</tt> increment</td>
|
||||
<td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2015/p0002r1.html">P0002R1</a></td>
|
||||
<td class="none" align="center">No</td>
|
||||
<td class="svn" align="center">Clang 3.8</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Make exception specifications part of the type system</td>
|
||||
|
@ -609,7 +609,7 @@ as the draft C++1z standard evolves.</p>
|
|||
<td class="none" align="center">No</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><tt>__has_include</tt></td>
|
||||
<td><tt>__has_include</tt> in preprocessor conditionals</td>
|
||||
<td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2015/p0061.html">P0061R1</a></td>
|
||||
<td class="full" align="center">Yes</td>
|
||||
</tr>
|
||||
|
|
Loading…
Reference in New Issue