| //== PseudoConstantAnalysis.h - Find Pseudo-constants in the AST -*- C++ -*-==// |
| // |
| // The LLVM Compiler Infrastructure |
| // |
| // This file is distributed under the University of Illinois Open Source |
| // License. See LICENSE.TXT for details. |
| // |
| //===----------------------------------------------------------------------===// |
| // |
| // This file tracks the usage of variables in a Decl body to see if they are |
| // never written to, implying that they constant. This is useful in static |
| // analysis to see if a developer might have intended a variable to be const. |
| // |
| //===----------------------------------------------------------------------===// |
| |
| #ifndef LLVM_CLANG_ANALYSIS_ANALYSES_PSEUDOCONSTANTANALYSIS_H |
| #define LLVM_CLANG_ANALYSIS_ANALYSES_PSEUDOCONSTANTANALYSIS_H |
| |
| #include "clang/AST/Stmt.h" |
| |
| namespace clang { |
| |
| class PseudoConstantAnalysis { |
| public: |
| PseudoConstantAnalysis(const Stmt *DeclBody); |
| ~PseudoConstantAnalysis(); |
| |
| bool isPseudoConstant(const VarDecl *VD); |
| bool wasReferenced(const VarDecl *VD); |
| |
| private: |
| void RunAnalysis(); |
| inline static const Decl *getDecl(const Expr *E); |
| |
| // for storing the result of analyzed ValueDecls |
| void *NonConstantsImpl; |
| void *UsedVarsImpl; |
| |
| const Stmt *DeclBody; |
| bool Analyzed; |
| }; |
| |
| } |
| |
| #endif |