Skip to content

Commit 429e5be

Browse files
authored
[clang-tidy] Fix crash in readability-container-size-empty (llvm#94527)
Fixed crash caused by call to getCookedLiteral on template user defined literal. Fix base on assert in getCookedLiteral method. Closes llvm#94454
1 parent 212b78a commit 429e5be

File tree

3 files changed

+14
-2
lines changed

3 files changed

+14
-2
lines changed

clang-tools-extra/clang-tidy/readability/ContainerSizeEmptyCheck.cpp

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -96,9 +96,14 @@ AST_MATCHER(QualType, isIntegralType) {
9696

9797
AST_MATCHER_P(UserDefinedLiteral, hasLiteral,
9898
clang::ast_matchers::internal::Matcher<Expr>, InnerMatcher) {
99-
if (const Expr *CookedLiteral = Node.getCookedLiteral()) {
99+
const UserDefinedLiteral::LiteralOperatorKind LOK =
100+
Node.getLiteralOperatorKind();
101+
if (LOK == UserDefinedLiteral::LOK_Template ||
102+
LOK == UserDefinedLiteral::LOK_Raw)
103+
return false;
104+
105+
if (const Expr *CookedLiteral = Node.getCookedLiteral())
100106
return InnerMatcher.matches(*CookedLiteral, Finder, Builder);
101-
}
102107
return false;
103108
}
104109

clang-tools-extra/docs/ReleaseNotes.rst

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -376,6 +376,7 @@ Changes in existing checks
376376
- Improved :doc:`readability-container-size-empty
377377
<clang-tidy/checks/readability/container-size-empty>` check to prevent false
378378
positives when utilizing ``size`` or ``length`` methods that accept parameter.
379+
Fixed crash when facing template user defined literals.
379380

380381
- Improved :doc:`readability-duplicate-include
381382
<clang-tidy/checks/readability/duplicate-include>` check by excluding include

clang-tools-extra/test/clang-tidy/checkers/readability/container-size-empty.cpp

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -889,3 +889,9 @@ namespace PR88203 {
889889
// CHECK-FIXES: {{^ }}if (s.empty()) {}{{$}}
890890
}
891891
}
892+
893+
namespace PR94454 {
894+
template <char...>
895+
int operator""_ci() { return 0; }
896+
auto eq = 0_ci == 0;
897+
}

0 commit comments

Comments
 (0)