[clang-tools-extra] [clang-tid]fix modernize-use-auto incorrect fix hints for pointer (PR #77943)
Congcong Cai via cfe-commits
cfe-commits at lists.llvm.org
Fri Jan 12 15:47:58 PST 2024
================
@@ -405,12 +421,20 @@ void UseAutoCheck::replaceExpr(
auto Diag = diag(Range.getBegin(), Message);
+ bool ShouldReplenishVariableName = isMutliLevelPointerToTypeLocClasses(
+ FirstDecl->getTypeSourceInfo()->getTypeLoc(),
+ {TypeLoc::FunctionProto, TypeLoc::ConstantArray});
+
// Space after 'auto' to handle cases where the '*' in the pointer type is
// next to the identifier. This avoids changing 'int *p' into 'autop'.
- // FIXME: This doesn't work for function pointers because the variable name
- // is inside the type.
- Diag << FixItHint::CreateReplacement(Range, RemoveStars ? "auto " : "auto")
- << StarRemovals;
+ llvm::StringRef Auto = ShouldReplenishVariableName
+ ? (RemoveStars ? "auto " : "auto *")
+ : (RemoveStars ? "auto " : "auto");
+ std::string ReplenishedVariableName =
+ ShouldReplenishVariableName ? FirstDecl->getQualifiedNameAsString() : "";
+ std::string Replacement =
+ (Auto + llvm::StringRef{ReplenishedVariableName}).str();
+ Diag << FixItHint::CreateReplacement(Range, Replacement) << StarRemovals;
----------------
HerrCai0907 wrote:
It is very hard to split the variable name according to `TypeLoc` and `VarDecl`.
https://github.com/llvm/llvm-project/pull/77943
More information about the cfe-commits
mailing list