forked from OSchip/llvm-project
Avoid adding redundant parens.
Reviewers: bkramer Reviewed By: bkramer Subscribers: cfe-commits, sbenza Differential Revision: http://reviews.llvm.org/D4534 llvm-svn: 213149
This commit is contained in:
parent
692d6bb544
commit
1f317d6c05
|
@ -56,6 +56,7 @@ bool pointedTypesAreEqual(QualType SourceType, QualType DestType) {
|
|||
}
|
||||
return SourceType.getUnqualifiedType() == DestType.getUnqualifiedType();
|
||||
}
|
||||
|
||||
void AvoidCStyleCastsCheck::check(const MatchFinder::MatchResult &Result) {
|
||||
const auto *CastExpr = Result.Nodes.getNodeAs<CStyleCastExpr>("cast");
|
||||
|
||||
|
@ -85,15 +86,18 @@ void AvoidCStyleCastsCheck::check(const MatchFinder::MatchResult &Result) {
|
|||
diag_builder << ("Use " + CastType + ".").str();
|
||||
if (ParenRange.getBegin().isMacroID() || ParenRange.getEnd().isMacroID())
|
||||
return;
|
||||
diag_builder << FixItHint::CreateReplacement(
|
||||
ParenRange,
|
||||
(CastType + "<" + DestTypeString + ">(").str())
|
||||
<< FixItHint::CreateInsertion(
|
||||
Lexer::getLocForEndOfToken(
|
||||
CastExpr->getSubExprAsWritten()->getLocEnd(), 0,
|
||||
*Result.SourceManager,
|
||||
Result.Context->getLangOpts()),
|
||||
")");
|
||||
|
||||
const Expr *SubExpr = CastExpr->getSubExprAsWritten()->IgnoreImpCasts();
|
||||
std::string CastText = (CastType + "<" + DestTypeString + ">").str();
|
||||
if (!isa<ParenExpr>(SubExpr)) {
|
||||
CastText.push_back('(');
|
||||
diag_builder << FixItHint::CreateInsertion(
|
||||
Lexer::getLocForEndOfToken(SubExpr->getLocEnd(), 0,
|
||||
*Result.SourceManager,
|
||||
Result.Context->getLangOpts()),
|
||||
")");
|
||||
}
|
||||
diag_builder << FixItHint::CreateReplacement(ParenRange, CastText);
|
||||
};
|
||||
// Suggest appropriate C++ cast. See [expr.cast] for cast notation semantics.
|
||||
switch (CastExpr->getCastKind()) {
|
||||
|
|
|
@ -17,7 +17,7 @@ void f(int a, double b, const char *cpc, const void *cpv, X *pX) {
|
|||
|
||||
char *pc2 = (char*)(cpc + 33);
|
||||
// CHECK-MESSAGES: :[[@LINE-1]]:15: warning: C-style casts are discouraged. Use const_cast. {{.*}}
|
||||
// CHECK-FIXES: char *pc2 = const_cast<char *>((cpc + 33));
|
||||
// CHECK-FIXES: char *pc2 = const_cast<char *>(cpc + 33);
|
||||
|
||||
const char &crc = *cpc;
|
||||
char &rc = (char&)crc;
|
||||
|
@ -33,6 +33,20 @@ void f(int a, double b, const char *cpc, const void *cpv, X *pX) {
|
|||
// CHECK-MESSAGES: :[[@LINE-1]]:20: warning: C-style casts are discouraged. Use const_cast. {{.*}}
|
||||
// CHECK-FIXES: char ****ppppc = const_cast<char ****>(ppcpcpc);
|
||||
|
||||
char ***pppc = (char***)*(ppcpcpc);
|
||||
// CHECK-MESSAGES: :[[@LINE-1]]:18: warning: C-style casts are discouraged. Use const_cast. {{.*}}
|
||||
// CHECK-FIXES: char ***pppc = const_cast<char ***>(*(ppcpcpc));
|
||||
|
||||
char ***pppc2 = (char***)(*ppcpcpc);
|
||||
// CHECK-MESSAGES: :[[@LINE-1]]:19: warning: C-style casts are discouraged. Use const_cast. {{.*}}
|
||||
// CHECK-FIXES: char ***pppc2 = const_cast<char ***>(*ppcpcpc);
|
||||
|
||||
char *pc5 = (char*)(const char*)(cpv);
|
||||
// CHECK-MESSAGES: :[[@LINE-1]]:15: warning: C-style casts are discouraged. Use const_cast. {{.*}}
|
||||
// CHECK-MESSAGES: :[[@LINE-2]]:22: warning: C-style casts are discouraged. Use reinterpret_cast. {{.*}}
|
||||
// CHECK-FIXES: char *pc5 = const_cast<char *>(reinterpret_cast<const char *>(cpv));
|
||||
|
||||
|
||||
int b1 = (int)b;
|
||||
// CHECK-MESSAGES: :[[@LINE-1]]:12: warning: C-style casts are discouraged. Use static_cast. [google-readability-casting]
|
||||
// CHECK-FIXES: int b1 = static_cast<int>(b);
|
||||
|
|
Loading…
Reference in New Issue