brintos

brintos / llvm-project-archived public Read only

0
0
Text · 2.1 KiB · 7dcb16e Raw
63 lines · c
1//===----------------------------------------------------------------------===//2//3// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.4// See https://llvm.org/LICENSE.txt for license information.5// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception6//7//===----------------------------------------------------------------------===//8 9#ifndef LLVM_CLANG_TOOLS_EXTRA_CLANG_TIDY_READABILITY_NONCONSTPARAMETERCHECK_H10#define LLVM_CLANG_TOOLS_EXTRA_CLANG_TIDY_READABILITY_NONCONSTPARAMETERCHECK_H11 12#include "../ClangTidyCheck.h"13 14namespace clang::tidy::readability {15 16/// Warn when a pointer function parameter can be const.17///18/// For the user-facing documentation see:19/// https://clang.llvm.org/extra/clang-tidy/checks/readability/non-const-parameter.html20class NonConstParameterCheck : public ClangTidyCheck {21public:22  NonConstParameterCheck(StringRef Name, ClangTidyContext *Context)23      : ClangTidyCheck(Name, Context) {}24  void registerMatchers(ast_matchers::MatchFinder *Finder) override;25  void check(const ast_matchers::MatchFinder::MatchResult &Result) override;26  void onEndOfTranslationUnit() override;27  std::optional<TraversalKind> getCheckTraversalKind() const override {28    return TK_IgnoreUnlessSpelledInSource;29  }30 31private:32  /// Parameter info.33  struct ParmInfo {34    /// Is function parameter referenced?35    bool IsReferenced;36 37    /// Can function parameter be const?38    bool CanBeConst;39  };40 41  /// Track all nonconst integer/float parameters.42  std::map<const ParmVarDecl *, ParmInfo> Parameters;43 44  /// Add function parameter.45  void addParm(const ParmVarDecl *Parm);46 47  /// Set IsReferenced.48  void setReferenced(const DeclRefExpr *Ref);49 50  /// Set CanNotBeConst.51  /// Visits sub expressions recursively. If a DeclRefExpr is found52  /// and CanNotBeConst is true the Parameter is marked as not-const.53  /// The CanNotBeConst is updated as sub expressions are visited.54  void markCanNotBeConst(const Expr *E, bool CanNotBeConst);55 56  /// Diagnose non const parameters.57  void diagnoseNonConstParameters();58};59 60} // namespace clang::tidy::readability61 62#endif // LLVM_CLANG_TOOLS_EXTRA_CLANG_TIDY_READABILITY_NONCONSTPARAMETERCHECK_H63