summaryrefslogtreecommitdiffstats
path: root/include/clang/Analysis/Analyses/UninitializedValues.h
diff options
context:
space:
mode:
Diffstat (limited to 'include/clang/Analysis/Analyses/UninitializedValues.h')
-rw-r--r--include/clang/Analysis/Analyses/UninitializedValues.h126
1 files changed, 0 insertions, 126 deletions
diff --git a/include/clang/Analysis/Analyses/UninitializedValues.h b/include/clang/Analysis/Analyses/UninitializedValues.h
deleted file mode 100644
index 53ff20c..0000000
--- a/include/clang/Analysis/Analyses/UninitializedValues.h
+++ /dev/null
@@ -1,126 +0,0 @@
-//= UninitializedValues.h - Finding uses of uninitialized values -*- C++ -*-==//
-//
-// The LLVM Compiler Infrastructure
-//
-// This file is distributed under the University of Illinois Open Source
-// License. See LICENSE.TXT for details.
-//
-//===----------------------------------------------------------------------===//
-//
-// This file defines APIs for invoking and reported uninitialized values
-// warnings.
-//
-//===----------------------------------------------------------------------===//
-
-#ifndef LLVM_CLANG_ANALYSIS_ANALYSES_UNINITIALIZEDVALUES_H
-#define LLVM_CLANG_ANALYSIS_ANALYSES_UNINITIALIZEDVALUES_H
-
-#include "clang/AST/Stmt.h"
-#include "llvm/ADT/SmallVector.h"
-
-namespace clang {
-
-class AnalysisDeclContext;
-class CFG;
-class DeclContext;
-class Expr;
-class VarDecl;
-
-/// A use of a variable, which might be uninitialized.
-class UninitUse {
-public:
- struct Branch {
- const Stmt *Terminator;
- unsigned Output;
- };
-
-private:
- /// The expression which uses this variable.
- const Expr *User;
-
- /// Is this use uninitialized whenever the function is called?
- bool UninitAfterCall;
-
- /// Is this use uninitialized whenever the variable declaration is reached?
- bool UninitAfterDecl;
-
- /// Does this use always see an uninitialized value?
- bool AlwaysUninit;
-
- /// This use is always uninitialized if it occurs after any of these branches
- /// is taken.
- SmallVector<Branch, 2> UninitBranches;
-
-public:
- UninitUse(const Expr *User, bool AlwaysUninit)
- : User(User), UninitAfterCall(false), UninitAfterDecl(false),
- AlwaysUninit(AlwaysUninit) {}
-
- void addUninitBranch(Branch B) {
- UninitBranches.push_back(B);
- }
-
- void setUninitAfterCall() { UninitAfterCall = true; }
- void setUninitAfterDecl() { UninitAfterDecl = true; }
-
- /// Get the expression containing the uninitialized use.
- const Expr *getUser() const { return User; }
-
- /// The kind of uninitialized use.
- enum Kind {
- /// The use might be uninitialized.
- Maybe,
- /// The use is uninitialized whenever a certain branch is taken.
- Sometimes,
- /// The use is uninitialized the first time it is reached after we reach
- /// the variable's declaration.
- AfterDecl,
- /// The use is uninitialized the first time it is reached after the function
- /// is called.
- AfterCall,
- /// The use is always uninitialized.
- Always
- };
-
- /// Get the kind of uninitialized use.
- Kind getKind() const {
- return AlwaysUninit ? Always :
- UninitAfterCall ? AfterCall :
- UninitAfterDecl ? AfterDecl :
- !branch_empty() ? Sometimes : Maybe;
- }
-
- typedef SmallVectorImpl<Branch>::const_iterator branch_iterator;
- /// Branches which inevitably result in the variable being used uninitialized.
- branch_iterator branch_begin() const { return UninitBranches.begin(); }
- branch_iterator branch_end() const { return UninitBranches.end(); }
- bool branch_empty() const { return UninitBranches.empty(); }
-};
-
-class UninitVariablesHandler {
-public:
- UninitVariablesHandler() {}
- virtual ~UninitVariablesHandler();
-
- /// Called when the uninitialized variable is used at the given expression.
- virtual void handleUseOfUninitVariable(const VarDecl *vd,
- const UninitUse &use) {}
-
- /// Called when the uninitialized variable analysis detects the
- /// idiom 'int x = x'. All other uses of 'x' within the initializer
- /// are handled by handleUseOfUninitVariable.
- virtual void handleSelfInit(const VarDecl *vd) {}
-};
-
-struct UninitVariablesAnalysisStats {
- unsigned NumVariablesAnalyzed;
- unsigned NumBlockVisits;
-};
-
-void runUninitializedVariablesAnalysis(const DeclContext &dc, const CFG &cfg,
- AnalysisDeclContext &ac,
- UninitVariablesHandler &handler,
- UninitVariablesAnalysisStats &stats);
-
-}
-#endif
OpenPOWER on IntegriCloud