forked from OSchip/llvm-project
Fix a bad location in -Wparentheses fix-it hint
The code used getLocStart() instead of getLocEnd(). This works for single token expressions, but breaks if the expression is longer. llvm-svn: 216306
This commit is contained in:
parent
e3eface17a
commit
7ec1a318ff
|
@ -9515,7 +9515,7 @@ static void DiagnoseBitwisePrecedence(Sema &Self, BinaryOperatorKind Opc,
|
|||
StringRef OpStr = isLeftComp ? LHSBO->getOpcodeStr() : RHSBO->getOpcodeStr();
|
||||
SourceRange ParensRange = isLeftComp ?
|
||||
SourceRange(LHSBO->getRHS()->getLocStart(), RHSExpr->getLocEnd())
|
||||
: SourceRange(LHSExpr->getLocStart(), RHSBO->getLHS()->getLocStart());
|
||||
: SourceRange(LHSExpr->getLocStart(), RHSBO->getLHS()->getLocEnd());
|
||||
|
||||
Self.Diag(OpLoc, diag::warn_precedence_bitwise_rel)
|
||||
<< DiagRange << BinaryOperator::getOpcodeStr(Opc) << OpStr;
|
||||
|
|
|
@ -113,3 +113,105 @@ namespace PR15628 {
|
|||
(void)(i-- ? true : false); // no-warning
|
||||
}
|
||||
}
|
||||
|
||||
namespace PR20735 {
|
||||
struct X {
|
||||
static int state;
|
||||
static int get();
|
||||
int get_num();
|
||||
int num;
|
||||
};
|
||||
namespace ns {
|
||||
int num = 0;
|
||||
int get();
|
||||
}
|
||||
void test(X x) {
|
||||
if (5 & x.get_num() != 0) {}
|
||||
// expected-warning@-1 {{& has lower precedence than !=; != will be evaluated first}}
|
||||
// expected-note@-2 {{place parentheses around the '!=' expression to silence this warning}}
|
||||
// expected-note@-3 {{place parentheses around the & expression to evaluate it first}}
|
||||
// CHECK: place parentheses around the '!=' expression to silence this warning
|
||||
// fix-it:"{{.*}}":{[[@LINE-5]]:13-[[@LINE-5]]:13}:"("
|
||||
// fix-it:"{{.*}}":{[[@LINE-6]]:29-[[@LINE-6]]:29}:")"
|
||||
// CHECK: place parentheses around the & expression to evaluate it first
|
||||
// fix-it:"{{.*}}":{[[@LINE-8]]:9-[[@LINE-8]]:9}:"("
|
||||
// fix-it:"{{.*}}":{[[@LINE-9]]:24-[[@LINE-9]]:24}:")"
|
||||
|
||||
if (5 & x.num != 0) {}
|
||||
// expected-warning@-1 {{& has lower precedence than !=; != will be evaluated first}}
|
||||
// expected-note@-2 {{place parentheses around the '!=' expression to silence this warning}}
|
||||
// expected-note@-3 {{place parentheses around the & expression to evaluate it first}}
|
||||
// CHECK: place parentheses around the '!=' expression to silence this warning
|
||||
// fix-it:"{{.*}}":{[[@LINE-5]]:13-[[@LINE-5]]:13}:"("
|
||||
// fix-it:"{{.*}}":{[[@LINE-6]]:23-[[@LINE-6]]:23}:")"
|
||||
// CHECK: place parentheses around the & expression to evaluate it first
|
||||
// fix-it:"{{.*}}":{[[@LINE-8]]:9-[[@LINE-8]]:9}:"("
|
||||
// fix-it:"{{.*}}":{[[@LINE-9]]:18-[[@LINE-9]]:18}:")"
|
||||
|
||||
if (5 & x.state != 0) {}
|
||||
// expected-warning@-1 {{& has lower precedence than !=; != will be evaluated first}}
|
||||
// expected-note@-2 {{place parentheses around the '!=' expression to silence this warning}}
|
||||
// expected-note@-3 {{place parentheses around the & expression to evaluate it first}}
|
||||
// CHECK: place parentheses around the '!=' expression to silence this warning
|
||||
// fix-it:"{{.*}}":{[[@LINE-5]]:13-[[@LINE-5]]:13}:"("
|
||||
// fix-it:"{{.*}}":{[[@LINE-6]]:25-[[@LINE-6]]:25}:")"
|
||||
// CHECK: place parentheses around the & expression to evaluate it first
|
||||
// fix-it:"{{.*}}":{[[@LINE-8]]:9-[[@LINE-8]]:9}:"("
|
||||
// fix-it:"{{.*}}":{[[@LINE-9]]:20-[[@LINE-9]]:20}:")"
|
||||
|
||||
if (5 & x.get() != 0) {}
|
||||
// expected-warning@-1 {{& has lower precedence than !=; != will be evaluated first}}
|
||||
// expected-note@-2 {{place parentheses around the '!=' expression to silence this warning}}
|
||||
// expected-note@-3 {{place parentheses around the & expression to evaluate it first}}
|
||||
// CHECK: place parentheses around the '!=' expression to silence this warning
|
||||
// fix-it:"{{.*}}":{[[@LINE-5]]:13-[[@LINE-5]]:13}:"("
|
||||
// fix-it:"{{.*}}":{[[@LINE-6]]:25-[[@LINE-6]]:25}:")"
|
||||
// CHECK: place parentheses around the & expression to evaluate it first
|
||||
// fix-it:"{{.*}}":{[[@LINE-8]]:9-[[@LINE-8]]:9}:"("
|
||||
// fix-it:"{{.*}}":{[[@LINE-9]]:20-[[@LINE-9]]:20}:")"
|
||||
|
||||
if (5 & X::state != 0) {}
|
||||
// expected-warning@-1 {{& has lower precedence than !=; != will be evaluated first}}
|
||||
// expected-note@-2 {{place parentheses around the '!=' expression to silence this warning}}
|
||||
// expected-note@-3 {{place parentheses around the & expression to evaluate it first}}
|
||||
// CHECK: place parentheses around the '!=' expression to silence this warning
|
||||
// fix-it:"{{.*}}":{[[@LINE-5]]:13-[[@LINE-5]]:13}:"("
|
||||
// fix-it:"{{.*}}":{[[@LINE-6]]:26-[[@LINE-6]]:26}:")"
|
||||
// CHECK: place parentheses around the & expression to evaluate it first
|
||||
// fix-it:"{{.*}}":{[[@LINE-8]]:9-[[@LINE-8]]:9}:"("
|
||||
// fix-it:"{{.*}}":{[[@LINE-9]]:21-[[@LINE-9]]:21}:")"
|
||||
|
||||
if (5 & X::get() != 0) {}
|
||||
// expected-warning@-1 {{& has lower precedence than !=; != will be evaluated first}}
|
||||
// expected-note@-2 {{place parentheses around the '!=' expression to silence this warning}}
|
||||
// expected-note@-3 {{place parentheses around the & expression to evaluate it first}}
|
||||
// CHECK: place parentheses around the '!=' expression to silence this warning
|
||||
// fix-it:"{{.*}}":{[[@LINE-5]]:13-[[@LINE-5]]:13}:"("
|
||||
// fix-it:"{{.*}}":{[[@LINE-6]]:26-[[@LINE-6]]:26}:")"
|
||||
// CHECK: place parentheses around the & expression to evaluate it first
|
||||
// fix-it:"{{.*}}":{[[@LINE-8]]:9-[[@LINE-8]]:9}:"("
|
||||
// fix-it:"{{.*}}":{[[@LINE-9]]:21-[[@LINE-9]]:21}:")"
|
||||
|
||||
if (5 & ns::get() != 0) {}
|
||||
// expected-warning@-1 {{& has lower precedence than !=; != will be evaluated first}}
|
||||
// expected-note@-2 {{place parentheses around the '!=' expression to silence this warning}}
|
||||
// expected-note@-3 {{place parentheses around the & expression to evaluate it first}}
|
||||
// CHECK: place parentheses around the '!=' expression to silence this warning
|
||||
// fix-it:"{{.*}}":{[[@LINE-5]]:13-[[@LINE-5]]:13}:"("
|
||||
// fix-it:"{{.*}}":{[[@LINE-6]]:27-[[@LINE-6]]:27}:")"
|
||||
// CHECK: place parentheses around the & expression to evaluate it first
|
||||
// fix-it:"{{.*}}":{[[@LINE-8]]:9-[[@LINE-8]]:9}:"("
|
||||
// fix-it:"{{.*}}":{[[@LINE-9]]:22-[[@LINE-9]]:22}:")"
|
||||
|
||||
if (5 & ns::num != 0) {}
|
||||
// expected-warning@-1 {{& has lower precedence than !=; != will be evaluated first}}
|
||||
// expected-note@-2 {{place parentheses around the '!=' expression to silence this warning}}
|
||||
// expected-note@-3 {{place parentheses around the & expression to evaluate it first}}
|
||||
// CHECK: place parentheses around the '!=' expression to silence this warning
|
||||
// fix-it:"{{.*}}":{[[@LINE-5]]:13-[[@LINE-5]]:13}:"("
|
||||
// fix-it:"{{.*}}":{[[@LINE-6]]:25-[[@LINE-6]]:25}:")"
|
||||
// CHECK: place parentheses around the & expression to evaluate it first
|
||||
// fix-it:"{{.*}}":{[[@LINE-8]]:9-[[@LINE-8]]:9}:"("
|
||||
// fix-it:"{{.*}}":{[[@LINE-9]]:20-[[@LINE-9]]:20}:")"
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue