|
clang 23.0.0git
|
#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/ConstructionContext.h"#include "clang/Analysis/Support/BumpVector.h"#include "clang/Basic/Builtins.h"#include "clang/Basic/ExceptionSpecificationType.h"#include "clang/Basic/JsonSupport.h"#include "clang/Basic/LLVM.h"#include "clang/Basic/LangOptions.h"#include "clang/Basic/SourceLocation.h"#include "clang/Basic/Specifiers.h"#include "llvm/ADT/APFloat.h"#include "llvm/ADT/APInt.h"#include "llvm/ADT/APSInt.h"#include "llvm/ADT/ArrayRef.h"#include "llvm/ADT/DenseMap.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/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/TimeProfiler.h"#include "llvm/Support/raw_ostream.h"#include <algorithm>#include <cassert>#include <cstddef>#include <memory>#include <optional>#include <string>#include <tuple>#include <utility>#include <vector>Go to the source code of this file.
Classes | |
| struct | llvm::DOTGraphTraits< const CFG * > |
Namespaces | |
| namespace | llvm |
| Diagnostic wrappers for TextAPI types for error reporting. | |
Functions | |
| static SourceLocation | GetEndLoc (Decl *D) |
| static bool | IsLiteralConstantExpr (const Expr *E) |
| Returns true on constant values based around a single IntegerLiteral, CharacterLiteral, or FloatingLiteral. | |
| static const Expr * | tryTransformToLiteralConstant (const Expr *E) |
| Helper for tryNormalizeBinaryOperator. | |
| static std::tuple< const Expr *, BinaryOperatorKind, const Expr * > | tryNormalizeBinaryOperator (const BinaryOperator *B) |
| Tries to interpret a binary operator into Expr Op NumExpr form, if NumExpr is an integer literal or an enum constant. | |
| 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. | |
| static TryResult | bothKnownTrue (TryResult R1, TryResult R2) |
| static const VariableArrayType * | FindVA (const Type *t) |
| static QualType | getReferenceInitTemporaryType (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. | |
| static bool | isFallthroughStatement (const AttributedStmt *A) |
| static bool | isCXXAssumeAttr (const AttributedStmt *A) |
| static bool | CanThrow (Expr *E, ASTContext &Ctx) |
| static bool | isBuiltinAssumeWithSideEffects (const ASTContext &Ctx, const CallExpr *CE) |
| static bool | shouldAddCase (bool &switchExclusivelyCovered, const Expr::EvalResult *switchCond, const CaseStmt *CS, ASTContext &Ctx) |
| static void | print_initializer (raw_ostream &OS, StmtPrinterHelper &Helper, const CXXCtorInitializer *I) |
| static void | print_construction_context (raw_ostream &OS, StmtPrinterHelper &Helper, const ConstructionContext *CC) |
| static void | print_elem (raw_ostream &OS, StmtPrinterHelper &Helper, const CFGElement &E, bool TerminateWithNewLine=true) |
| static void | print_block (raw_ostream &OS, const CFG *cfg, const CFGBlock &B, StmtPrinterHelper &Helper, bool print_edges, bool ShowColors) |
| static bool | isImmediateSinkBlock (const CFGBlock *Blk) |
Variables | |
| static StmtPrinterHelper * | GraphHelper |
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 150 of file CFG.cpp.
References clang::cast(), and clang::isa().
|
static |
|
static |
Definition at line 2839 of file CFG.cpp.
References clang::Type::getAs(), clang::Type::getPointeeType(), clang::Expr::getType(), clang::Type::isBlockPointerType(), clang::Type::isFunctionPointerType(), and clang::isUnresolvedExceptionSpec().
Referenced by clang::BlockVarCopyInit::BlockVarCopyInit(), clang::CodeGen::CodeGenFunction::BuildBlockRelease(), clang::Sema::BuildCXXNoexceptExpr(), clang::CodeGen::CodeGenFunction::enterByrefCleanup(), pushCaptureCleanup(), clang::ASTContext::setBlockVarCopyInit(), and clang::BlockVarCopyInit::setExprAndFlag().
|
static |
Definition at line 1513 of file CFG.cpp.
Referenced by clang::StmtIteratorBase::HandleDecl(), and clang::StmtIteratorBase::NextVA().
|
static |
Definition at line 69 of file CFG.cpp.
References clang::Decl::getLocation().
Retrieve the type of the temporary object whose lifetime was extended by a local reference with the given initializer.
Definition at line 1885 of file CFG.cpp.
References clang::Init.
Referenced by clang::CFGImplicitDtor::getDestructorDecl(), and print_elem().
|
static |
Definition at line 2854 of file CFG.cpp.
References clang::CallExpr::getArg(), clang::CallExpr::getBuiltinCallee(), and clang::Expr::HasSideEffects().
|
static |
Definition at line 2629 of file CFG.cpp.
References clang::AttributedStmt::getAttrs(), clang::AttributedStmt::getSubStmt(), clang::hasSpecificAttr(), and clang::isa().
|
static |
Definition at line 2622 of file CFG.cpp.
References clang::AttributedStmt::getAttrs(), clang::AttributedStmt::getSubStmt(), clang::hasSpecificAttr(), and clang::isa().
Definition at line 6422 of file CFG.cpp.
References clang::CFGElement::getAs(), clang::CFGBlock::hasNoReturnElement(), and clang::isa().
Referenced by clang::CFGBlock::isInevitablySinking().
Returns true on constant values based around a single IntegerLiteral, CharacterLiteral, or FloatingLiteral.
Allow for use of parentheses, integer casts, and negative signs.
Definition at line 80 of file CFG.cpp.
References clang::Expr::IgnoreParens(), and clang::isa().
Referenced by tryTransformToLiteralConstant().
|
static |
Definition at line 6164 of file CFG.cpp.
References clang::CFGBlock::begin(), clang::C, clang::CFGBlock::end(), clang::CFGBlock::getBlockID(), clang::CFG::getEntry(), clang::CXXCatchStmt::getExceptionDecl(), clang::CFG::getExit(), clang::SEHExceptStmt::getFilterExpr(), clang::CFG::getIndirectGotoBlock(), clang::CFGBlock::getLabel(), clang::LabelStmt::getName(), clang::CFGBlock::getTerminator(), clang::CFGBlock::hasNoReturnElement(), clang::isa(), clang::CFGTerminator::isValid(), clang::CFGBlock::Label, clang::CFGBlock::pred_begin(), clang::CFGBlock::pred_empty(), clang::CFGBlock::pred_end(), clang::CFGBlock::pred_size(), print_elem(), clang::Stmt::printPretty(), clang::CFGBlock::succ_begin(), clang::CFGBlock::succ_empty(), clang::CFGBlock::succ_end(), and clang::CFGBlock::succ_size().
Referenced by llvm::DOTGraphTraits< const CFG * >::getNodeLabel(), clang::CFG::print(), and clang::CFGBlock::print().
|
static |
Definition at line 5887 of file CFG.cpp.
References clang::ConstructionContext::ArgumentKind, clang::cast(), clang::ConstructionContext::CXX17ElidedCopyConstructorInitializerKind, clang::ConstructionContext::CXX17ElidedCopyReturnedValueKind, clang::ConstructionContext::CXX17ElidedCopyVariableKind, clang::ConstructionContext::ElidedTemporaryObjectKind, clang::ConstructionContext::getKind(), clang::ConstructionContext::LambdaCaptureKind, clang::ConstructionContext::NewAllocatedObjectKind, print_initializer(), clang::ConstructionContext::SimpleConstructorInitializerKind, clang::ConstructionContext::SimpleReturnedValueKind, clang::ConstructionContext::SimpleTemporaryObjectKind, and clang::ConstructionContext::SimpleVariableKind.
Referenced by print_elem().
|
static |
Definition at line 5982 of file CFG.cpp.
References clang::CFGElement::AutomaticObjectDtor, clang::CFGElement::BaseDtor, clang::CompoundStmt::body_rbegin(), clang::cast(), clang::CFGElement::castAs(), Children, clang::CFGElement::CleanupFunction, clang::CFGElement::Constructor, clang::CFGElement::CXXRecordTypedCall, clang::CFGElement::DeleteDtor, clang::CFGElement::FullExprCleanup, clang::CFGNewAllocator::getAllocatorExpr(), clang::CXXDeleteExpr::getArgument(), clang::CFGElement::getAs(), clang::Type::getAsCXXRecordDecl(), clang::Type::getBaseElementTypeUnsafe(), clang::CFGDeleteDtor::getCXXRecordDecl(), clang::CFGDeleteDtor::getDeleteExpr(), clang::CFGInitializer::getInitializer(), clang::CFGElement::getKind(), clang::NamedDecl::getName(), clang::BinaryOperator::getOpcode(), clang::NamedDecl::getQualifiedNameAsString(), getReferenceInitTemporaryType(), clang::BinaryOperator::getRHS(), clang::CFGStmt::getStmt(), clang::Stmt::getStmtClassName(), clang::MaterializeTemporaryExpr::getSubExpr(), clang::StmtExpr::getSubStmt(), clang::CXXBaseSpecifier::getType(), clang::Expr::getType(), clang::ValueDecl::getType(), clang::CFGAutomaticObjDtor::getVarDecl(), clang::CFGLifetimeEnds::getVarDecl(), clang::CFGScopeBegin::getVarDecl(), clang::CFGScopeEnd::getVarDecl(), clang::PrintingPolicy::IncludeNewlines, clang::CFGElement::Initializer, clang::isa(), clang::CFGElement::LifetimeEnds, clang::CFGElement::LoopExit, clang::CFGElement::MemberDtor, clang::CFGElement::NewAllocator, clang::QualType::print(), print_construction_context(), print_initializer(), clang::Stmt::printPretty(), clang::CFGElement::ScopeBegin, clang::CFGElement::ScopeEnd, clang::CFGElement::Statement, and clang::CFGElement::TemporaryDtor.
Referenced by clang::CFGElement::dumpToStream(), and print_block().
|
static |
Definition at line 5866 of file CFG.cpp.
References clang::CXXCtorInitializer::getAnyMember(), clang::Type::getAsCXXRecordDecl(), clang::CXXCtorInitializer::getBaseClass(), clang::CXXCtorInitializer::getInit(), clang::NamedDecl::getName(), clang::TypeSourceInfo::getType(), clang::CXXCtorInitializer::getTypeSourceInfo(), clang::CXXCtorInitializer::isBaseInitializer(), clang::CXXCtorInitializer::isDelegatingInitializer(), and clang::Stmt::printPretty().
Referenced by print_construction_context(), and print_elem().
|
static |
Definition at line 4619 of file CFG.cpp.
References clang::Expr::EvaluateKnownConstInt(), clang::APValue::getInt(), clang::CaseStmt::getLHS(), clang::CaseStmt::getRHS(), clang::APValue::isInt(), and clang::Expr::EvalResult::Val.
|
static |
Tries to interpret a binary operator into Expr Op NumExpr form, if NumExpr 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 120 of file CFG.cpp.
References clang::BinaryOperator::getLHS(), clang::BinaryOperator::getOpcode(), clang::BinaryOperator::getRHS(), and tryTransformToLiteralConstant().
Helper for tryNormalizeBinaryOperator.
Attempts to extract an IntegerLiteral FloatingLiteral, CharacterLiteral or EnumConstantDecl from the given Expr. If it fails, returns nullptr.
Definition at line 105 of file CFG.cpp.
References clang::Expr::IgnoreParenImpCasts(), clang::Expr::IgnoreParens(), clang::isa(), and IsLiteralConstantExpr().
Referenced by tryNormalizeBinaryOperator().
|
static |
Definition at line 6577 of file CFG.cpp.
Referenced by llvm::DOTGraphTraits< const CFG * >::getNodeLabel(), and clang::CFG::viewCFG().