Subversion Repositories QNX 8.QNX8 LLVM/Clang compiler suite

Rev

Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
14 pmbaty 1
//===-- Transfer.h ----------------------------------------------*- C++ -*-===//
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-exception
6
//
7
//===----------------------------------------------------------------------===//
8
//
9
//  This file defines a transfer function that evaluates a program statement and
10
//  updates an environment accordingly.
11
//
12
//===----------------------------------------------------------------------===//
13
 
14
#ifndef LLVM_CLANG_ANALYSIS_FLOWSENSITIVE_TRANSFER_H
15
#define LLVM_CLANG_ANALYSIS_FLOWSENSITIVE_TRANSFER_H
16
 
17
#include "clang/AST/Stmt.h"
18
#include "clang/Analysis/FlowSensitive/DataflowAnalysisContext.h"
19
#include "clang/Analysis/FlowSensitive/DataflowEnvironment.h"
20
 
21
namespace clang {
22
namespace dataflow {
23
 
24
/// Maps statements to the environments of basic blocks that contain them.
25
class StmtToEnvMap {
26
public:
27
  virtual ~StmtToEnvMap() = default;
28
 
29
  /// Returns the environment of the basic block that contains `S` or nullptr if
30
  /// there isn't one.
31
  /// FIXME: Ensure that the result can't be null and return a const reference.
32
  virtual const Environment *getEnvironment(const Stmt &S) const = 0;
33
};
34
 
35
/// Evaluates `S` and updates `Env` accordingly.
36
///
37
/// Requirements:
38
///
39
///  `S` must not be `ParenExpr` or `ExprWithCleanups`.
40
void transfer(const StmtToEnvMap &StmtToEnv, const Stmt &S, Environment &Env);
41
 
42
} // namespace dataflow
43
} // namespace clang
44
 
45
#endif // LLVM_CLANG_ANALYSIS_FLOWSENSITIVE_TRANSFER_H