[PATCH] D116814: Accept string literal decay in conditional operator
Elvis Stansvik via Phabricator via cfe-commits
cfe-commits at lists.llvm.org
Fri Jan 7 09:29:13 PST 2022
estan updated this revision to Diff 398177.
estan added a comment.
Add entry in clang-tools-extra/docs/ReleaseNotes.rst
Repository:
rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D116814/new/
https://reviews.llvm.org/D116814
Files:
clang-tools-extra/clang-tidy/cppcoreguidelines/ProBoundsArrayToPointerDecayCheck.cpp
clang-tools-extra/docs/ReleaseNotes.rst
clang-tools-extra/test/clang-tidy/checkers/cppcoreguidelines-pro-bounds-array-to-pointer-decay.cpp
Index: clang-tools-extra/test/clang-tidy/checkers/cppcoreguidelines-pro-bounds-array-to-pointer-decay.cpp
===================================================================
--- clang-tools-extra/test/clang-tidy/checkers/cppcoreguidelines-pro-bounds-array-to-pointer-decay.cpp
+++ clang-tools-extra/test/clang-tidy/checkers/cppcoreguidelines-pro-bounds-array-to-pointer-decay.cpp
@@ -49,3 +49,14 @@
void *a[2];
f2(static_cast<void *const*>(a)); // OK, explicit cast
}
+
+void issue31155(int i) {
+ const char *a = i ? "foo" : "bar"; // OK, decay string literal to pointer
+ const char *b = i ? "foo" : "foobar"; // OK, decay string literal to pointer
+
+ char arr[1];
+ const char *c = i ? arr : "bar";
+ // CHECK-MESSAGES: :[[@LINE-1]]:23: warning: do not implicitly decay an array into a pointer
+ const char *d = i ? "foo" : arr;
+ // CHECK-MESSAGES: :[[@LINE-1]]:31: warning: do not implicitly decay an array into a pointer
+}
Index: clang-tools-extra/docs/ReleaseNotes.rst
===================================================================
--- clang-tools-extra/docs/ReleaseNotes.rst
+++ clang-tools-extra/docs/ReleaseNotes.rst
@@ -67,6 +67,10 @@
Improvements to clang-tidy
--------------------------
+- Make the `cppcoreguidelines-pro-bounds-array-to-pointer-decay` check accept
+ string literal to pointer decay in conditional operator even if operands are
+ of the same length.
+
- Ignore warnings from macros defined in system headers, if not using the
`-system-headers` flag.
Index: clang-tools-extra/clang-tidy/cppcoreguidelines/ProBoundsArrayToPointerDecayCheck.cpp
===================================================================
--- clang-tools-extra/clang-tidy/cppcoreguidelines/ProBoundsArrayToPointerDecayCheck.cpp
+++ clang-tools-extra/clang-tidy/cppcoreguidelines/ProBoundsArrayToPointerDecayCheck.cpp
@@ -54,13 +54,17 @@
// 2) inside a range-for over an array
// 3) if it converts a string literal to a pointer
Finder->addMatcher(
- traverse(TK_AsIs,
- implicitCastExpr(
- unless(hasParent(arraySubscriptExpr())),
- unless(hasParentIgnoringImpCasts(explicitCastExpr())),
- unless(isInsideOfRangeBeginEndStmt()),
- unless(hasSourceExpression(ignoringParens(stringLiteral()))))
- .bind("cast")),
+ traverse(
+ TK_AsIs,
+ implicitCastExpr(
+ unless(hasParent(arraySubscriptExpr())),
+ unless(hasParentIgnoringImpCasts(explicitCastExpr())),
+ unless(isInsideOfRangeBeginEndStmt()),
+ unless(hasSourceExpression(ignoringParens(stringLiteral()))),
+ unless(hasSourceExpression(ignoringParens(conditionalOperator(
+ allOf(hasTrueExpression(stringLiteral()),
+ hasFalseExpression(stringLiteral())))))))
+ .bind("cast")),
this);
}
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D116814.398177.patch
Type: text/x-patch
Size: 2944 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20220107/f760fe89/attachment.bin>
More information about the cfe-commits
mailing list