clang  6.0.0svn
Classes | Namespaces | Functions | Variables
CFG.cpp File Reference
#include "clang/Analysis/CFG.h"
#include "clang/AST/ASTContext.h"
#include "clang/AST/Attr.h"
#include "clang/AST/Decl.h"
#include "clang/AST/DeclBase.h"
#include "clang/AST/DeclCXX.h"
#include "clang/AST/DeclGroup.h"
#include "clang/AST/Expr.h"
#include "clang/AST/ExprCXX.h"
#include "clang/AST/OperationKinds.h"
#include "clang/AST/PrettyPrinter.h"
#include "clang/AST/Stmt.h"
#include "clang/AST/StmtCXX.h"
#include "clang/AST/StmtObjC.h"
#include "clang/AST/StmtVisitor.h"
#include "clang/AST/Type.h"
#include "clang/Analysis/Support/BumpVector.h"
#include "clang/Basic/Builtins.h"
#include "clang/Basic/ExceptionSpecificationType.h"
#include "clang/Basic/LLVM.h"
#include "clang/Basic/LangOptions.h"
#include "clang/Basic/SourceLocation.h"
#include "clang/Basic/Specifiers.h"
#include "llvm/ADT/APInt.h"
#include "llvm/ADT/APSInt.h"
#include "llvm/ADT/ArrayRef.h"
#include "llvm/ADT/DenseMap.h"
#include "llvm/ADT/Optional.h"
#include "llvm/ADT/STLExtras.h"
#include "llvm/ADT/SetVector.h"
#include "llvm/ADT/SmallPtrSet.h"
#include "llvm/ADT/SmallVector.h"
#include "llvm/Support/Allocator.h"
#include "llvm/Support/Casting.h"
#include "llvm/Support/Compiler.h"
#include "llvm/Support/DOTGraphTraits.h"
#include "llvm/Support/ErrorHandling.h"
#include "llvm/Support/Format.h"
#include "llvm/Support/GraphWriter.h"
#include "llvm/Support/SaveAndRestore.h"
#include "llvm/Support/raw_ostream.h"
#include <cassert>
#include <memory>
#include <string>
#include <tuple>
#include <utility>
#include <vector>
Include dependency graph for CFG.cpp:

Go to the source code of this file.

Classes

struct  llvm::DOTGraphTraits< const CFG * >
 

Namespaces

 llvm
 DominatorTree GraphTraits specialization so the DominatorTree can be iterable by generic graph iterators.
 

Functions

static SourceLocation GetEndLoc (Decl *D)
 
static const ExprtryTransformToIntOrEnumConstant (const Expr *E)
 Helper for tryNormalizeBinaryOperator. More...
 
static std::tuple< const DeclRefExpr *, BinaryOperatorKind, const Expr * > tryNormalizeBinaryOperator (const BinaryOperator *B)
 Tries to interpret a binary operator into Decl Op Expr form, if Expr is an integer literal or an enum constant. More...
 
static bool areExprTypesCompatible (const Expr *E1, const Expr *E2)
 For an expression x == Foo && x == Bar, this determines whether the Foo and Bar are either of the same enumeration type, or both integer literals. More...
 
static TryResult bothKnownTrue (TryResult R1, TryResult R2)
 
static const VariableArrayTypeFindVA (const Type *t)
 
static QualType getReferenceInitTemporaryType (ASTContext &Context, const Expr *Init, bool *FoundMTE=nullptr)
 Retrieve the type of the temporary object whose lifetime was extended by a local reference with the given initializer. More...
 
static bool CanThrow (Expr *E, ASTContext &Ctx)
 
static bool shouldAddCase (bool &switchExclusivelyCovered, const Expr::EvalResult *switchCond, const CaseStmt *CS, ASTContext &Ctx)
 
static void print_elem (raw_ostream &OS, StmtPrinterHelper &Helper, const CFGElement &E)
 
static void print_block (raw_ostream &OS, const CFG *cfg, const CFGBlock &B, StmtPrinterHelper &Helper, bool print_edges, bool ShowColors)
 

Variables

static StmtPrinterHelper * GraphHelper
 

Function Documentation

◆ areExprTypesCompatible()

static bool areExprTypesCompatible ( const Expr E1,
const Expr E2 
)
static

For an expression x == Foo && x == Bar, this determines whether the Foo and Bar are either of the same enumeration type, or both integer literals.

It's an error to pass this arguments that are not either IntegerLiterals or DeclRefExprs (that have decls of type EnumConstantDecl)

Definition at line 120 of file CFG.cpp.

References clang::ast_matchers::stmt.

◆ bothKnownTrue()

static TryResult bothKnownTrue ( TryResult  R1,
TryResult  R2 
)
static

Definition at line 373 of file CFG.cpp.

References clang::children().

◆ CanThrow()

static bool CanThrow ( Expr E,
ASTContext Ctx 
)
static

◆ FindVA()

static const VariableArrayType* FindVA ( const Type t)
static

Definition at line 1107 of file CFG.cpp.

◆ GetEndLoc()

static SourceLocation GetEndLoc ( Decl D)
static

Definition at line 65 of file CFG.cpp.

References clang::Decl::getLocation().

◆ getReferenceInitTemporaryType()

static QualType getReferenceInitTemporaryType ( ASTContext Context,
const Expr Init,
bool FoundMTE = nullptr 
)
static

Retrieve the type of the temporary object whose lifetime was extended by a local reference with the given initializer.

Definition at line 1272 of file CFG.cpp.

Referenced by clang::CFGImplicitDtor::getDestructorDecl().

◆ print_block()

static void print_block ( raw_ostream &  OS,
const CFG cfg,
const CFGBlock B,
StmtPrinterHelper &  Helper,
bool  print_edges,
bool  ShowColors 
)
static

◆ print_elem()

static void print_elem ( raw_ostream &  OS,
StmtPrinterHelper &  Helper,
const CFGElement E 
)
static

◆ shouldAddCase()

static bool shouldAddCase ( bool switchExclusivelyCovered,
const Expr::EvalResult switchCond,
const CaseStmt CS,
ASTContext Ctx 
)
static

◆ tryNormalizeBinaryOperator()

static std::tuple<const DeclRefExpr *, BinaryOperatorKind, const Expr *> tryNormalizeBinaryOperator ( const BinaryOperator B)
static

Tries to interpret a binary operator into Decl Op Expr form, if Expr is an integer literal or an enum constant.

If this fails, at least one of the returned DeclRefExpr or Expr will be null.

Definition at line 89 of file CFG.cpp.

References clang::BinaryOperator::getLHS(), clang::BinaryOperator::getOpcode(), clang::BinaryOperator::getRHS(), clang::Expr::IgnoreParenImpCasts(), and tryTransformToIntOrEnumConstant().

◆ tryTransformToIntOrEnumConstant()

static const Expr* tryTransformToIntOrEnumConstant ( const Expr E)
static

Helper for tryNormalizeBinaryOperator.

Attempts to extract an IntegerLiteral or EnumConstantDecl from the given Expr. If it fails, returns nullptr.

Definition at line 74 of file CFG.cpp.

Referenced by tryNormalizeBinaryOperator().

Variable Documentation

◆ GraphHelper

StmtPrinterHelper* GraphHelper
static

Definition at line 4968 of file CFG.cpp.