mikecrowe added inline comments.
================
Comment at: clang-tools-extra/clang-tidy/modernize/UseStdFormatCheck.cpp:46
+void UseStdFormatCheck::registerMatchers(MatchFinder *Finder) {
+ Finder->addMatcher(
+ callExpr(argumentCountAtLeast(1), hasArgument(0, stringLiteral()),
----------------
This matcher also matches the `operator+` call in:
```
std::string A(const std::string &in)
{
return "_" + in;
}
```
which causes an assertion failure:
```
clang-tidy: /home/mac/git/llvm-project/clang/include/clang/AST/Decl.h:275:
llvm::StringRef clang::NamedDecl::getName() const: Assertion
`Name.isIdentifier() && "Name is not a simple identifier"' failed.
```
when the `StrFormatLikeFunctions` option is set to an unqualified name:
```
-config="{CheckOptions: [{key: modernize-use-std-format.StrictMode, value:
false}, {key: modernize-use-std-format.StrFormatLikeFunctions, value:
'strprintf'}]}"
```
`MatchesAnyListedNameMatcher::NameMatcher::match` calls `NamedDecl.getName()`
which presumably raises the assertion due to the `operator+` not having a name
(that's mentioned in the source anyway.)
I'm unsure whether I should be narrowing the matcher here so that it guaranteed
to not try calling `matchesAnyListedName` on something that lacks a name, or
whether `MatchesAnyListedNameMatcher` ought to be more tolerant of being called
in such situations.
I note that `HasNameMatcher` has rather more elaborate code for generating the
name than `MatchesAnyListedNameMatcher` does.
This problem also affects `modernize-use-std-print`, but due to the need for
there to be no return value in that check it requires somewhat-unlikely code
like:
```
void A(const std::string &in)
{
"_" + in;
}
```
Do you have any advice? Given that this problem affects a check that has
already landed should I open a bug?
================
Comment at: clang-tools-extra/clang-tidy/modernize/UseStdFormatCheck.cpp:47
+ Finder->addMatcher(
+ callExpr(argumentCountAtLeast(1), hasArgument(0, stringLiteral()),
+ callee(functionDecl(matchers::matchesAnyListedName(
----------------
I need to add an `isOrdinary()` call here like `modernize-use-std-print` has.
Repository:
rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D154287/new/
https://reviews.llvm.org/D154287
_______________________________________________
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits