Hi Richard, Here you are: https://reviews.llvm.org/D45569 <https://reviews.llvm.org/D45569>
I am now thinking if it makes sense to output this warning for pre-17 standards: warning: incrementing expression of type bool is deprecated and incompatible with C++17 Produced in: SemaExpr.cpp static QualType CheckIncrementDecrementOperand // Increment of bool sets it to true, but is deprecated. S.Diag(OpLoc, S.getLangOpts().CPlusPlus17 ? diag::ext_increment_bool : diag::warn_increment_bool) What do you think? Jan > On 11 Apr 2018, at 15:19, Richard Smith <rich...@metafoo.co.uk> wrote: > > While you're here... ++ should not be available for bool in C++17 onwards. :) > > On Wed, 11 Apr 2018, 14:39 Jan Korous via cfe-commits, > <cfe-commits@lists.llvm.org <mailto:cfe-commits@lists.llvm.org>> wrote: > Author: jkorous > Date: Wed Apr 11 06:36:29 2018 > New Revision: 329804 > > URL: http://llvm.org/viewvc/llvm-project?rev=329804&view=rev > <http://llvm.org/viewvc/llvm-project?rev=329804&view=rev> > Log: > [Sema] Fix built-in decrement operator overload resolution > > C++ [over.built] p4: > > "For every pair (T, VQ), where T is an arithmetic type other than bool, and > VQ is either volatile or empty, there exist candidate operator functions of > the form > > VQ T& operator--(VQ T&); > T operator--(VQ T&, int); > " > The bool type is in position LastPromotedIntegralType in > BuiltinOperatorOverloadBuilder::getArithmeticType::ArithmeticTypes, but > addPlusPlusMinusMinusArithmeticOverloads() was expecting it at position 0. > > Differential Revision: https://reviews.llvm.org/D44988 > <https://reviews.llvm.org/D44988> > > rdar://problem/34255516 > > Modified: > cfe/trunk/lib/Sema/SemaOverload.cpp > cfe/trunk/test/SemaCXX/overloaded-builtin-operators.cpp > > Modified: cfe/trunk/lib/Sema/SemaOverload.cpp > URL: > http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Sema/SemaOverload.cpp?rev=329804&r1=329803&r2=329804&view=diff > > <http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Sema/SemaOverload.cpp?rev=329804&r1=329803&r2=329804&view=diff> > ============================================================================== > --- cfe/trunk/lib/Sema/SemaOverload.cpp (original) > +++ cfe/trunk/lib/Sema/SemaOverload.cpp Wed Apr 11 06:36:29 2018 > @@ -7796,10 +7796,12 @@ public: > if (!HasArithmeticOrEnumeralCandidateType) > return; > > - for (unsigned Arith = (Op == OO_PlusPlus? 0 : 1); > - Arith < NumArithmeticTypes; ++Arith) { > + for (unsigned Arith = 0; Arith < NumArithmeticTypes; ++Arith) { > + const auto TypeOfT = ArithmeticTypes[Arith]; > + if (Op == OO_MinusMinus && TypeOfT == S.Context.BoolTy) > + continue; > addPlusPlusMinusMinusStyleOverloads( > - ArithmeticTypes[Arith], > + TypeOfT, > VisibleTypeConversionsQuals.hasVolatile(), > VisibleTypeConversionsQuals.hasRestrict()); > } > > Modified: cfe/trunk/test/SemaCXX/overloaded-builtin-operators.cpp > URL: > http://llvm.org/viewvc/llvm-project/cfe/trunk/test/SemaCXX/overloaded-builtin-operators.cpp?rev=329804&r1=329803&r2=329804&view=diff > > <http://llvm.org/viewvc/llvm-project/cfe/trunk/test/SemaCXX/overloaded-builtin-operators.cpp?rev=329804&r1=329803&r2=329804&view=diff> > ============================================================================== > --- cfe/trunk/test/SemaCXX/overloaded-builtin-operators.cpp (original) > +++ cfe/trunk/test/SemaCXX/overloaded-builtin-operators.cpp Wed Apr 11 > 06:36:29 2018 > @@ -62,6 +62,10 @@ void f(Short s, Long l, Enum1 e1, Enum2 > // FIXME: should pass (void)static_cast<no&>(islong(e1 % e2)); > } > > +struct BoolRef { > + operator bool&(); > +}; > + > struct ShortRef { // expected-note{{candidate function (the implicit copy > assignment operator) not viable}} > #if __cplusplus >= 201103L // C++11 or later > // expected-note@-2 {{candidate function (the implicit move assignment > operator) not viable}} > @@ -73,6 +77,10 @@ struct LongRef { > operator volatile long&(); > }; > > +struct FloatRef { > + operator float&(); > +}; > + > struct XpmfRef { // expected-note{{candidate function (the implicit copy > assignment operator) not viable}} > #if __cplusplus >= 201103L // C++11 or later > // expected-note@-2 {{candidate function (the implicit move assignment > operator) not viable}} > @@ -84,13 +92,19 @@ struct E2Ref { > operator E2&(); > }; > > -void g(ShortRef sr, LongRef lr, E2Ref e2_ref, XpmfRef pmf_ref) { > +void g(BoolRef br, ShortRef sr, LongRef lr, FloatRef fr, E2Ref e2_ref, > XpmfRef pmf_ref) { > // C++ [over.built]p3 > short s1 = sr++; > > - // C++ [over.built]p3 > + // C++ [over.built]p4 > long l1 = lr--; > > + // C++ [over.built]p4 > + float f1 = fr--; > + > + // C++ [over.built]p4 > + bool b2 = br--; // expected-error{{cannot decrement value of type > 'BoolRef'}} > + > // C++ [over.built]p18 > short& sr1 = (sr *= lr); > volatile long& lr1 = (lr *= sr); > > > _______________________________________________ > cfe-commits mailing list > cfe-commits@lists.llvm.org <mailto:cfe-commits@lists.llvm.org> > http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits > <http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits>
_______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits