clang 22.0.0git
Expr.cpp File Reference
#include "clang/AST/Expr.h"
#include "clang/AST/APValue.h"
#include "clang/AST/ASTContext.h"
#include "clang/AST/ASTLambda.h"
#include "clang/AST/Attr.h"
#include "clang/AST/ComputeDependence.h"
#include "clang/AST/DeclCXX.h"
#include "clang/AST/DeclObjC.h"
#include "clang/AST/DeclTemplate.h"
#include "clang/AST/DependenceFlags.h"
#include "clang/AST/EvaluatedExprVisitor.h"
#include "clang/AST/ExprCXX.h"
#include "clang/AST/IgnoreExpr.h"
#include "clang/AST/Mangle.h"
#include "clang/AST/RecordLayout.h"
#include "clang/Basic/Builtins.h"
#include "clang/Basic/CharInfo.h"
#include "clang/Basic/SourceManager.h"
#include "clang/Basic/TargetInfo.h"
#include "clang/Lex/Lexer.h"
#include "clang/Lex/LiteralSupport.h"
#include "clang/Lex/Preprocessor.h"
#include "llvm/Support/ErrorHandling.h"
#include "llvm/Support/Format.h"
#include "llvm/Support/raw_ostream.h"
#include <algorithm>
#include <cstring>
#include <optional>
#include "clang/AST/StmtNodes.inc"
#include "clang/AST/OperationKinds.def"

Go to the source code of this file.

Macros

#define ABSTRACT_STMT(type)
#define STMT(type, base)
#define EXPR(type, base)
#define UNARY_OPERATION(Name, Spelling)
#define CAST_OPERATION(Name)
#define ABSTRACT_STMT(x)
#define CASTEXPR(Type, Base)
#define STMT(Type, Base)
#define BINARY_OPERATION(Name, Spelling)
#define ABSTRACT_STMT(Type)
#define STMT(Type, Base)
#define EXPR(Type, Base)

Functions

static void AssertResultStorageKind (ConstantResultStorageKind Kind)
static unsigned SizeOfCallExprInstance (Expr::StmtClass SC)
static const ExprskipTemporaryBindingsNoOpCastsAndParens (const Expr *E)
 Skip over any no-op casts and any temporary-binding expressions.
static std::optional< BinaryOperator * > getOverflowPatternBinOp (const BinaryOperator *E)
 Certain overflow-dependent code patterns can have their integer overflow sanitization disabled.
static void computeOverflowPatternExclusion (const ASTContext &Ctx, const BinaryOperator *E)
 Compute and set the OverflowPatternExclusion bit based on whether the BinaryOperator expression matches an overflow pattern being ignored by -fsanitize-undefined-ignore-overflow-pattern=add-signed-overflow-test or -fsanitize-undefined-ignore-overflow-pattern=add-unsigned-overflow-test.

Macro Definition Documentation

◆ ABSTRACT_STMT [1/3]

#define ABSTRACT_STMT ( Type)

◆ ABSTRACT_STMT [2/3]

#define ABSTRACT_STMT ( type)

◆ ABSTRACT_STMT [3/3]

#define ABSTRACT_STMT ( x)

◆ BINARY_OPERATION

#define BINARY_OPERATION ( Name,
Spelling )
Value:
case BO_##Name: return Spelling;

◆ CAST_OPERATION

#define CAST_OPERATION ( Name)
Value:
case CK_##Name: return #Name;

◆ CASTEXPR

#define CASTEXPR ( Type,
Base )
Value:
case Stmt::Type##Class: \
return static_cast<Type *>(this) \
->getTrailingObjectsNonStrict<CXXBaseSpecifier *>();
The base class of the type hierarchy.
Definition TypeBase.h:1833

◆ EXPR [1/2]

#define EXPR ( Type,
Base )

◆ EXPR [2/2]

#define EXPR ( type,
base )
Value:
case Stmt::type##Class: return getExprLocImpl<type>(this, &type::getExprLoc);

◆ STMT [1/3]

#define STMT ( Type,
Base )

◆ STMT [2/3]

#define STMT ( Type,
Base )
Value:
case Type##Class:

◆ STMT [3/3]

#define STMT ( type,
base )
Value:
case Stmt::type##Class: break;

◆ UNARY_OPERATION

#define UNARY_OPERATION ( Name,
Spelling )
Value:
case UO_##Name: return Spelling;

Function Documentation

◆ AssertResultStorageKind()

void AssertResultStorageKind ( ConstantResultStorageKind Kind)
static

Definition at line 290 of file Expr.cpp.

References clang::APValue, clang::Int64, and clang::None.

Referenced by clang::ConstantExpr::Create(), and clang::ConstantExpr::CreateEmpty().

◆ computeOverflowPatternExclusion()

void computeOverflowPatternExclusion ( const ASTContext & Ctx,
const BinaryOperator * E )
static

Compute and set the OverflowPatternExclusion bit based on whether the BinaryOperator expression matches an overflow pattern being ignored by -fsanitize-undefined-ignore-overflow-pattern=add-signed-overflow-test or -fsanitize-undefined-ignore-overflow-pattern=add-unsigned-overflow-test.

Definition at line 4877 of file Expr.cpp.

References clang::LangOptionsBase::AddSignedOverflowTest, clang::LangOptionsBase::AddUnsignedOverflowTest, clang::ASTContext::getLangOpts(), getOverflowPatternBinOp(), clang::LangOptions::isOverflowPatternExcluded(), clang::Type::isSignedIntegerType(), and clang::Type::isUnsignedIntegerType().

Referenced by clang::BinaryOperator::BinaryOperator().

◆ getOverflowPatternBinOp()

std::optional< BinaryOperator * > getOverflowPatternBinOp ( const BinaryOperator * E)
static

Certain overflow-dependent code patterns can have their integer overflow sanitization disabled.

Check for the common pattern if (a + b < a) and return the resulting BinaryOperator responsible for the addition so we can elide overflow checks during codegen.

Definition at line 4831 of file Expr.cpp.

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

Referenced by computeOverflowPatternExclusion().

◆ SizeOfCallExprInstance()

unsigned SizeOfCallExprInstance ( Expr::StmtClass SC)
static

Definition at line 1446 of file Expr.cpp.

Referenced by clang::CallExpr::CallExpr().

◆ skipTemporaryBindingsNoOpCastsAndParens()

const Expr * skipTemporaryBindingsNoOpCastsAndParens ( const Expr * E)
static

Skip over any no-op casts and any temporary-binding expressions.

Definition at line 3181 of file Expr.cpp.

References clang::Expr::IgnoreParens().

Referenced by clang::Expr::isTemporaryObject().