28 const MatchFinder::MatchResult &Result) {
30 CharSourceRange FileRange = Lexer::makeFileCharRange(
32 *Result.SourceManager, Result.Context->getLangOpts());
34 if (FileRange.isInvalid())
38 tok::kw_const, FileRange, *Result.Context, *Result.SourceManager);
55 const auto *Func = Result.Nodes.getNodeAs<FunctionDecl>(
"func");
56 const auto *Param = Result.Nodes.getNodeAs<ParmVarDecl>(
"param");
58 if (!Param->getType().isLocalConstQualified())
62 (Param->getBeginLoc().isMacroID() || Param->getEndLoc().isMacroID())) {
68 const auto ConstLocation = Tok ? Tok->getLocation() : Param->getBeginLoc();
70 auto Diag = diag(ConstLocation,
71 "parameter %0 is const-qualified in the function "
72 "declaration; const-qualification of parameters only has an "
73 "effect in function definitions");
74 if (Param->getName().empty()) {
75 for (
unsigned int I = 0; I < Func->getNumParams(); ++I) {
76 if (Param == Func->getParamDecl(I)) {
85 if (Param->getBeginLoc().isMacroID() != Param->getEndLoc().isMacroID()) {
93 Diag << FixItHint::CreateRemoval(
94 CharSourceRange::getTokenRange(Tok->getLocation(), Tok->getLocation()));
std::optional< Token > getQualifyingToken(tok::TokenKind TK, CharSourceRange Range, const ASTContext &Context, const SourceManager &SM)
Assuming that Range spans a CVR-qualified type, returns the token in Range that is responsible for th...