Skip to content

Commit 4310713

Browse files
committed
Fix initList handling
1 parent d56e333 commit 4310713

File tree

2 files changed

+18
-9
lines changed

2 files changed

+18
-9
lines changed

clang-tools-extra/clang-tidy/bugprone/SuspiciousStringviewDataUsageCheck.cpp

Lines changed: 9 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -62,28 +62,29 @@ void SuspiciousStringviewDataUsageCheck::registerMatchers(MatchFinder *Finder) {
6262
on(ignoringParenImpCasts(
6363
matchers::isStatementIdenticalToBoundNode("self"))));
6464

65+
auto DescendantSizeCall = expr(hasDescendant(expr(SizeCall,
66+
hasAncestor(expr(AncestorCall).bind("ancestor-size")),
67+
hasAncestor(expr(equalsBoundNode("parent"), equalsBoundNode("ancestor-size"))))));
68+
6569
Finder->addMatcher(
6670
cxxMemberCallExpr(
6771
on(ignoringParenImpCasts(expr().bind("self"))), callee(DataMethod),
6872
expr().bind("data-call"),
6973
hasParent(expr(anyOf(
7074
invocation(
71-
expr().bind("call"), unless(cxxOperatorCallExpr()),
75+
expr().bind("parent"), unless(cxxOperatorCallExpr()),
7276
hasAnyArgument(
7377
ignoringParenImpCasts(equalsBoundNode("data-call"))),
7478
unless(hasAnyArgument(ignoringParenImpCasts(SizeCall))),
75-
unless(hasAnyArgument(hasDescendant(expr(
76-
SizeCall,
77-
hasAncestor(expr(AncestorCall).bind("ancestor-size")),
78-
hasAncestor(expr(equalsBoundNode("call"),
79-
equalsBoundNode("ancestor-size"))))))),
79+
unless(hasAnyArgument(DescendantSizeCall)),
8080
hasDeclaration(namedDecl(
8181
unless(matchers::matchesAnyListedName(AllowedCallees))))),
82-
initListExpr(expr().bind("init"),
82+
initListExpr(expr().bind("parent"),
8383
hasType(qualType(hasCanonicalType(hasDeclaration(
8484
recordDecl(unless(matchers::matchesAnyListedName(
8585
AllowedCallees))))))),
86-
unless(has(ignoringParenImpCasts(SizeCall)))))))),
86+
unless(DescendantSizeCall))
87+
)))),
8788
this);
8889
}
8990

clang-tools-extra/test/clang-tidy/checkers/bugprone/suspicious-stringview-data-usage.cpp

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,11 @@ struct View {
55
const char* str;
66
};
77

8+
struct Pair {
9+
const char* begin;
10+
const char* end;
11+
};
12+
813
struct ViewWithSize {
914
const char* str;
1015
std::string_view::size_type size;
@@ -43,6 +48,9 @@ void valid(std::string_view sv) {
4348
something(sv.data(), sv.length());
4449
ViewWithSize view1{sv.data(), sv.size()};
4550
ViewWithSize view2{sv.data(), sv.length()};
46-
51+
Pair view3{sv.data(), sv.data() + sv.size()};
52+
Pair view4{sv.data(), sv.data() + sv.length()};
53+
Pair view5{sv.data(), sv.size() + sv.data()};
54+
Pair view6{sv.data(), sv.length() + sv.data()};
4755
const char* str{sv.data()};
4856
}

0 commit comments

Comments
 (0)