From: David Blaikie Date: Fri, 19 Oct 2012 18:26:06 +0000 (+0000) Subject: Clarify wording of -Wshift-op-parentheses. X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=5f531a489774ce46370fcb005a51d46d511f7914;p=clang Clarify wording of -Wshift-op-parentheses. Suggestion from Matt Beaumont-Gay reviewing r165283. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@166296 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/include/clang/Basic/DiagnosticSemaKinds.td b/include/clang/Basic/DiagnosticSemaKinds.td index 18600a4446..b2779d5cb8 100644 --- a/include/clang/Basic/DiagnosticSemaKinds.td +++ b/include/clang/Basic/DiagnosticSemaKinds.td @@ -3865,7 +3865,8 @@ def warn_logical_and_in_logical_or : Warning< "'&&' within '||'">, InGroup; def warn_addition_in_bitshift : Warning< - "'%0' within '%1'">, InGroup; + "operator '%0' has lower precedence than '%1'; " + "'%1' will be evaluated first">, InGroup; def warn_self_assignment : Warning< "explicitly assigning a variable of type %0 to itself">, diff --git a/lib/Sema/SemaExpr.cpp b/lib/Sema/SemaExpr.cpp index 86091d50a3..b75df8fe8d 100644 --- a/lib/Sema/SemaExpr.cpp +++ b/lib/Sema/SemaExpr.cpp @@ -8586,12 +8586,12 @@ static void DiagnoseBitwiseAndInBitwiseOr(Sema &S, SourceLocation OpLoc, } static void DiagnoseAdditionInShift(Sema &S, SourceLocation OpLoc, - Expr *SubExpr, StringRef shift) { + Expr *SubExpr, StringRef Shift) { if (BinaryOperator *Bop = dyn_cast(SubExpr)) { if (Bop->getOpcode() == BO_Add || Bop->getOpcode() == BO_Sub) { StringRef Op = Bop->getOpcodeStr(); S.Diag(Bop->getOperatorLoc(), diag::warn_addition_in_bitshift) - << Bop->getSourceRange() << OpLoc << Op << shift; + << Bop->getSourceRange() << OpLoc << Shift << Op; SuggestParentheses(S, Bop->getOperatorLoc(), S.PDiag(diag::note_precedence_silence) << Op, Bop->getSourceRange()); @@ -8623,9 +8623,9 @@ static void DiagnoseBinOpPrecedence(Sema &Self, BinaryOperatorKind Opc, if ((Opc == BO_Shl && LHSExpr->getType()->isIntegralType(Self.getASTContext())) || Opc == BO_Shr) { - StringRef shift = BinaryOperator::getOpcodeStr(Opc); - DiagnoseAdditionInShift(Self, OpLoc, LHSExpr, shift); - DiagnoseAdditionInShift(Self, OpLoc, RHSExpr, shift); + StringRef Shift = BinaryOperator::getOpcodeStr(Opc); + DiagnoseAdditionInShift(Self, OpLoc, LHSExpr, Shift); + DiagnoseAdditionInShift(Self, OpLoc, RHSExpr, Shift); } } diff --git a/test/Sema/parentheses.cpp b/test/Sema/parentheses.cpp index d0dcdda0bf..8f5f24652d 100644 --- a/test/Sema/parentheses.cpp +++ b/test/Sema/parentheses.cpp @@ -49,11 +49,11 @@ void test(S *s, bool (S::*m_ptr)()) { } void test(int a, int b, int c) { - (void)(a >> b + c); // expected-warning {{'+' within '>>'}} \ + (void)(a >> b + c); // expected-warning {{operator '>>' has lower precedence than '+'; '+' will be evaluated first}} \ expected-note {{place parentheses around the '+' expression to silence this warning}} - (void)(a - b << c); // expected-warning {{'-' within '<<'}} \ + (void)(a - b << c); // expected-warning {{operator '<<' has lower precedence than '-'; '-' will be evaluated first}} \ expected-note {{place parentheses around the '-' expression to silence this warning}} Stream() << b + c; - Stream() >> b + c; // expected-warning {{'+' within '>>'}} \ + Stream() >> b + c; // expected-warning {{operator '>>' has lower precedence than '+'; '+' will be evaluated first}} \ expected-note {{place parentheses around the '+' expression to silence this warning}} }