forked from OSchip/llvm-project
[clang-tidy] fix PR39583 - ignoring ParenCast for string-literals in pro-bounds-array-to-pointer-decay
Summary: The fix to the issue that `const char* p = ("foo")` is diagnosed as decay is to ignored the ParenCast. Resolves PR39583 Reviewers: aaron.ballman, alexfh, hokein Reviewed By: aaron.ballman Subscribers: nemanjai, xazax.hun, kbarton, cfe-commits Differential Revision: https://reviews.llvm.org/D54281 llvm-svn: 346555
This commit is contained in:
parent
295aa09dd2
commit
ef67ce0f6f
|
@ -58,10 +58,11 @@ void ProBoundsArrayToPointerDecayCheck::registerMatchers(MatchFinder *Finder) {
|
||||||
// 2) inside a range-for over an array
|
// 2) inside a range-for over an array
|
||||||
// 3) if it converts a string literal to a pointer
|
// 3) if it converts a string literal to a pointer
|
||||||
Finder->addMatcher(
|
Finder->addMatcher(
|
||||||
implicitCastExpr(unless(hasParent(arraySubscriptExpr())),
|
implicitCastExpr(
|
||||||
unless(hasParentIgnoringImpCasts(explicitCastExpr())),
|
unless(hasParent(arraySubscriptExpr())),
|
||||||
unless(isInsideOfRangeBeginEndStmt()),
|
unless(hasParentIgnoringImpCasts(explicitCastExpr())),
|
||||||
unless(hasSourceExpression(stringLiteral())))
|
unless(isInsideOfRangeBeginEndStmt()),
|
||||||
|
unless(hasSourceExpression(ignoringParens(stringLiteral()))))
|
||||||
.bind("cast"),
|
.bind("cast"),
|
||||||
this);
|
this);
|
||||||
}
|
}
|
||||||
|
|
|
@ -30,6 +30,7 @@ void f() {
|
||||||
arrayviewfun(av); // OK
|
arrayviewfun(av); // OK
|
||||||
|
|
||||||
int i = a[0]; // OK
|
int i = a[0]; // OK
|
||||||
|
int j = a[(1 + 2)];// OK
|
||||||
pointerfun(&a[0]); // OK
|
pointerfun(&a[0]); // OK
|
||||||
|
|
||||||
for (auto &e : a) // OK, iteration internally decays array to pointer
|
for (auto &e : a) // OK, iteration internally decays array to pointer
|
||||||
|
@ -39,6 +40,9 @@ void f() {
|
||||||
const char *g() {
|
const char *g() {
|
||||||
return "clang"; // OK, decay string literal to pointer
|
return "clang"; // OK, decay string literal to pointer
|
||||||
}
|
}
|
||||||
|
const char *g2() {
|
||||||
|
return ("clang"); // OK, ParenExpr hides the literal-pointer decay
|
||||||
|
}
|
||||||
|
|
||||||
void f2(void *const *);
|
void f2(void *const *);
|
||||||
void bug25362() {
|
void bug25362() {
|
||||||
|
|
Loading…
Reference in New Issue