|
clang 24.0.0git
|
#include "ABIInfoImpl.h"#include "CGCUDARuntime.h"#include "CGCXXABI.h"#include "CGCall.h"#include "CGCleanup.h"#include "CGDebugInfo.h"#include "CGHLSLRuntime.h"#include "CGObjCRuntime.h"#include "CGOpenMPRuntime.h"#include "CGRecordLayout.h"#include "CodeGenFunction.h"#include "CodeGenModule.h"#include "CodeGenPGO.h"#include "ConstantEmitter.h"#include "TargetInfo.h"#include "clang/AST/ASTContext.h"#include "clang/AST/ASTLambda.h"#include "clang/AST/Attr.h"#include "clang/AST/DeclObjC.h"#include "clang/AST/Expr.h"#include "clang/AST/InferAlloc.h"#include "clang/AST/MatrixUtils.h"#include "clang/AST/NSAPI.h"#include "clang/AST/ParentMapContext.h"#include "clang/AST/StmtVisitor.h"#include "clang/Basic/Builtins.h"#include "clang/Basic/CodeGenOptions.h"#include "clang/Basic/Module.h"#include "clang/Basic/SourceManager.h"#include "clang/CodeGenUtils/ExprUtils.h"#include "clang/CodeGenUtils/RecordLayoutUtils.h"#include "clang/CodeGenUtils/TargetUtils.h"#include "llvm/ADT/STLExtras.h"#include "llvm/ADT/ScopeExit.h"#include "llvm/ADT/StringExtras.h"#include "llvm/IR/Constants.h"#include "llvm/IR/DataLayout.h"#include "llvm/IR/Intrinsics.h"#include "llvm/IR/IntrinsicsWebAssembly.h"#include "llvm/IR/LLVMContext.h"#include "llvm/IR/MDBuilder.h"#include "llvm/IR/MatrixBuilder.h"#include "llvm/Support/ConvertUTF.h"#include "llvm/Support/Endian.h"#include "llvm/Support/MathExtras.h"#include "llvm/Support/Path.h"#include "llvm/Support/SaveAndRestore.h"#include "llvm/Support/xxhash.h"#include "llvm/Transforms/Utils/SanitizerStats.h"#include <numeric>#include <optional>#include <string>Go to the source code of this file.
Namespaces | |
| namespace | clang |
| Top level wrappers for InstallAPI frontend operations. | |
Macros | |
| #define | SANITIZER_CHECK(Enum, Name, Version, Msg) |
| #define | SANITIZER_CHECK(Enum, Name, Version, Msg) |
Enumerations | |
| enum | VariableTypeDescriptorKind : uint16_t { TK_Integer = 0x0000 , TK_Float = 0x0001 , TK_BitInt = 0x0002 , TK_Unknown = 0xffff } |
Functions | |
| llvm::cl::opt< bool > | clang::ClSanitizeGuardChecks ("ubsan-guard-checks", llvm::cl::desc("Guard UBSAN checks with `llvm.allow.ubsan.check()`.")) |
| static llvm::StringRef | GetUBSanTrapForHandler (SanitizerHandler ID) |
| static void | pushTemporaryCleanup (CodeGenFunction &CGF, const MaterializeTemporaryExpr *M, const Expr *E, Address ReferenceTemporary) |
| static RawAddress | createReferenceTemporary (CodeGenFunction &CGF, const MaterializeTemporaryExpr *M, const Expr *Inner, RawAddress *Alloca=nullptr) |
| static llvm::Value * | emitHashMix (CGBuilderTy &Builder, llvm::Value *Acc, llvm::Value *Ptr) |
| static llvm::Value * | getArrayIndexingBound (CodeGenFunction &CGF, const Expr *Base, QualType &IndexedType, LangOptions::StrictFlexArraysLevelKind StrictFlexArraysLevel) |
| If Base is known to point to the start of an array, return the length of that array. | |
| static bool | RecordContainsField (const RecordDecl *RD, const FieldDecl *Field) |
Returns true if Field is reachable from RD either as a direct field or through a chain of nested record fields (including anonymous structs/unions). | |
| static bool | getFieldOffsetInBits (CodeGenFunction &CGF, const RecordDecl *RD, const FieldDecl *Field, int64_t &Offset) |
| The offset of a field from the beginning of the record. | |
| static SmallString< 64 > | getAllocTokenFunctionName (const Decl *D, const ASTContext &Ctx) |
Returns the qualified name of D for use as the function name in !alloc_token metadata, or "" if D is null or not a NamedDecl. | |
| static CharUnits | getArrayElementAlign (CharUnits arrayAlign, llvm::Value *idx, CharUnits eltSize) |
| static Address | emitPointerArithmetic (CodeGenFunction &CGF, const BinaryOperator *BO, LValueBaseInfo *BaseInfo, TBAAAccessInfo *TBAAInfo, KnownNonNull_t IsKnownNonNull) |
| Emit pointer + index arithmetic. | |
| static Address | EmitPointerWithAlignment (const Expr *E, LValueBaseInfo *BaseInfo, TBAAAccessInfo *TBAAInfo, KnownNonNull_t IsKnownNonNull, CodeGenFunction &CGF) |
| static DeclRefExpr * | tryToConvertMemberExprToDeclRefExpr (CodeGenFunction &CGF, const MemberExpr *ME) |
| static bool | getRangeForType (CodeGenFunction &CGF, QualType Ty, llvm::APInt &Min, llvm::APInt &End, bool StrictEnums, bool StrictBool, bool IsBool) |
| static RawAddress | MaybeConvertMatrixAddress (RawAddress Addr, CodeGenFunction &CGF, bool IsVector=true) |
| static void | EmitStoreOfMatrixScalar (llvm::Value *value, LValue lvalue, bool isInit, CodeGenFunction &CGF) |
| static RValue | EmitLoadOfMatrixLValue (LValue LV, SourceLocation Loc, CodeGenFunction &CGF) |
| static void | setObjCGCLValueClass (const ASTContext &Ctx, const Expr *E, LValue &LV, bool IsMemberAccess=false) |
| static LValue | EmitThreadPrivateVarDeclLValue (CodeGenFunction &CGF, const VarDecl *VD, QualType T, Address Addr, llvm::Type *RealVarTy, SourceLocation Loc) |
| static Address | emitDeclTargetVarDeclLValue (CodeGenFunction &CGF, const VarDecl *VD, QualType T) |
| static LValue | EmitGlobalVarDeclLValue (CodeGenFunction &CGF, const Expr *E, const VarDecl *VD) |
| static LValue | EmitFunctionDeclLValue (CodeGenFunction &CGF, const Expr *E, GlobalDecl GD) |
| static LValue | EmitCapturedFieldLValue (CodeGenFunction &CGF, const FieldDecl *FD, llvm::Value *ThisValue) |
| static LValue | EmitGlobalNamedRegister (const VarDecl *VD, CodeGenModule &CGM) |
| Named Registers are named metadata pointing to the register name which will be read from/written to as an argument to the intrinsic @llvm.read/write_register. | |
| static bool | canEmitSpuriousReferenceToVariable (CodeGenFunction &CGF, const DeclRefExpr *E, const VarDecl *VD) |
Determine whether we can emit a reference to VD from the current context, despite not necessarily having seen an odr-use of the variable in this context. | |
| static CheckRecoverableKind | getRecoverableKind (SanitizerKind::SanitizerOrdinal Ordinal) |
| static void | emitCheckHandlerCall (CodeGenFunction &CGF, llvm::FunctionType *FnType, ArrayRef< llvm::Value * > FnArgs, SanitizerHandler CheckHandler, CheckRecoverableKind RecoverKind, bool IsFatal, llvm::BasicBlock *ContBB, bool NoMerge) |
| static const Expr * | isSimpleArrayDecayOperand (const Expr *E) |
| isSimpleArrayDecayOperand - If the specified expr is a simple decay from an array to pointer, return the array subexpression. | |
| static llvm::Value * | emitArraySubscriptGEP (CodeGenFunction &CGF, llvm::Type *elemType, llvm::Value *ptr, ArrayRef< llvm::Value * > indices, bool inbounds, bool signedIndices, SourceLocation loc, const llvm::Twine &name="arrayidx") |
| static Address | emitArraySubscriptGEP (CodeGenFunction &CGF, Address addr, ArrayRef< llvm::Value * > indices, llvm::Type *arrayType, llvm::Type *elementType, bool inbounds, bool signedIndices, SourceLocation loc, CharUnits align, const llvm::Twine &name="arrayidx") |
| static bool | hasBPFPreserveStaticOffset (const RecordDecl *D) |
| static bool | hasBPFPreserveStaticOffset (const Expr *E) |
| static Address | wrapWithBPFPreserveStaticOffset (CodeGenFunction &CGF, Address &Addr) |
| static bool | IsPreserveAIArrayBase (CodeGenFunction &CGF, const Expr *ArrayBase) |
| Given an array base, check whether its member access belongs to a record with preserve_access_index attribute or not. | |
| static Address | emitArraySubscriptGEP (CodeGenFunction &CGF, Address addr, ArrayRef< llvm::Value * > indices, QualType eltType, bool inbounds, bool signedIndices, SourceLocation loc, QualType *arrayType=nullptr, const Expr *Base=nullptr, const llvm::Twine &name="arrayidx") |
| static std::optional< int64_t > | getOffsetDifferenceInBits (CodeGenFunction &CGF, const FieldDecl *FD1, const FieldDecl *FD2) |
Returns the relative offset difference between FD1 and FD2. | |
| static llvm::Value * | convertSizedByBoundToElementCount (CodeGenFunction &CGF, llvm::Value *BoundsVal, QualType PointeeTy, bool CountSigned) |
| Convert a '__sized_by' byte-count bound to an element-count bound so it can be compared against an element index. | |
| static Address | emitOMPArraySectionBase (CodeGenFunction &CGF, const Expr *Base, LValueBaseInfo &BaseInfo, TBAAAccessInfo &TBAAInfo, QualType BaseTy, QualType ElTy, bool IsLowerBound) |
| static Address | emitAddrOfZeroSizeField (CodeGenFunction &CGF, Address Base, const FieldDecl *Field, bool IsInBounds) |
| Get the address of a zero-sized field within a record. | |
| static Address | emitRawAddrOfFieldStorage (CodeGenFunction &CGF, Address base, const FieldDecl *field, bool IsInBounds) |
| Drill down to the storage of a field without walking into reference types, and without respect for pointer field protection. | |
| static Address | emitAddrOfFieldStorage (CodeGenFunction &CGF, Address base, const FieldDecl *field, bool IsInBounds) |
| Drill down to the storage of a field without walking into reference types, wrapping the address in an llvm.protected.field.ptr intrinsic for the pointer field protection feature if necessary. | |
| static Address | emitPreserveStructAccess (CodeGenFunction &CGF, LValue base, Address addr, const FieldDecl *field) |
| static bool | hasAnyVptr (const QualType Type, const ASTContext &Context) |
| static std::optional< LValue > | EmitLValueOrThrowExpression (CodeGenFunction &CGF, const Expr *Operand) |
| Emit the operand of a glvalue conditional operator. | |
| static CGCallee | EmitDirectCallee (CodeGenFunction &CGF, GlobalDecl GD) |
| static GlobalDecl | getGlobalDeclForDirectCall (const FunctionDecl *FD) |
| static LValueOrRValue | emitPseudoObjectExpr (CodeGenFunction &CGF, const PseudoObjectExpr *E, bool forLValue, AggValueSlot slot) |
Variables | |
| const SanitizerHandlerInfo | SanitizerHandlers [] |
| #define SANITIZER_CHECK | ( | Enum, | |
| Name, | |||
| Version, | |||
| Msg ) |
| #define SANITIZER_CHECK | ( | Enum, | |
| Name, | |||
| Version, | |||
| Msg ) |
| Enumerator | |
|---|---|
| TK_Integer | An integer type. |
| TK_Float | A floating-point type. |
| TK_BitInt | An _BitInt(N) type. |
| TK_Unknown | Any other type. The value representation is unspecified. |
Definition at line 84 of file CGExpr.cpp.
|
static |
Determine whether we can emit a reference to VD from the current context, despite not necessarily having seen an odr-use of the variable in this context.
Definition at line 3581 of file CGExpr.cpp.
References clang::CodeGen::CodeGenFunction::CGM, clang::CodeGen::CodeGenFunction::CurCodeDecl, clang::CodeGen::CodeGenFunction::getContext(), clang::Decl::getDeclContext(), clang::VarDecl::getDefinition(), clang::CodeGen::CodeGenFunction::getLangOpts(), clang::CodeGen::CodeGenModule::getLLVMLinkageVarDefinition(), clang::VarDecl::hasLocalStorage(), and clang::DeclRefExpr::refersToEnclosingVariableOrCapture().
|
static |
Convert a '__sized_by' byte-count bound to an element-count bound so it can be compared against an element index.
BoundsVal is the loaded byte count and PointeeTy is the pointer's pointee type. Returns BoundsVal unchanged when no scaling is needed, otherwise returns a new llvm::Value* that is element count.
Definition at line 5033 of file CGExpr.cpp.
References clang::CodeGen::CodeGenFunction::Builder, clang::CodeGen::CodeGenFunction::getContext(), clang::CharUnits::getQuantity(), clang::ASTContext::getTypeSizeInChars(), int64_t, clang::Type::isFunctionType(), clang::Type::isIncompleteType(), clang::QualType::isNull(), clang::Type::isVoidType(), and clang::CharUnits::One().
Referenced by clang::CodeGen::CodeGenFunction::EmitCountedByBoundsChecking().
|
static |
Definition at line 483 of file CGExpr.cpp.
References clang::C, clang::CodeGen::CodeGenFunction::CGM, clang::CodeGen::CodeGenFunction::CreateMemTemp(), clang::QualType::getAddressSpace(), clang::CodeGen::CodeGenModule::GetAddrOfGlobalTemporary(), clang::CharUnits::getAsAlign(), clang::CodeGen::CodeGenModule::getCodeGenOpts(), clang::CodeGen::CodeGenFunction::getContext(), clang::CodeGen::CodeGenModule::GetGlobalConstantAddressSpace(), clang::CodeGen::CodeGenFunction::getLLVMContext(), clang::CodeGen::CodeGenModule::getModule(), clang::MaterializeTemporaryExpr::getStorageDuration(), clang::ASTContext::getTargetAddressSpace(), clang::Expr::getType(), clang::ASTContext::getTypeAlignInChars(), clang::Init, clang::Type::isArrayType(), clang::QualType::isConstantStorage(), clang::Type::isRecordType(), clang::CodeGen::CodeGenModule::performAddrSpaceCast(), clang::SD_Automatic, clang::SD_Dynamic, clang::SD_FullExpression, clang::SD_Static, and clang::SD_Thread.
|
static |
Drill down to the storage of a field without walking into reference types, wrapping the address in an llvm.protected.field.ptr intrinsic for the pointer field protection feature if necessary.
The resulting address doesn't necessarily have the right type.
Definition at line 5920 of file CGExpr.cpp.
References clang::Addr, clang::CodeGen::CodeGenFunction::EmitAddressOfPFPField(), emitRawAddrOfFieldStorage(), clang::CodeGen::CodeGenFunction::getContext(), and clang::ASTContext::isPFPField().
Referenced by clang::CodeGen::CodeGenFunction::EmitLValueForField(), and clang::CodeGen::CodeGenFunction::EmitLValueForFieldInitialization().
|
static |
Get the address of a zero-sized field within a record.
The resulting address doesn't necessarily have the right type.
Definition at line 5873 of file CGExpr.cpp.
References clang::CodeGen::CodeGenFunction::Builder, clang::CodeGen::CGBuilderTy::CreateConstByteGEP(), clang::CodeGen::CGBuilderTy::CreateConstInBoundsByteGEP(), clang::CodeGen::CodeGenFunction::getContext(), clang::ASTContext::getFieldOffset(), clang::CodeGen::CodeGenTypeCache::Int8Ty, and clang::ASTContext::toCharUnitsFromBits().
|
static |
Definition at line 4843 of file CGExpr.cpp.
References clang::ast_matchers::arrayType, clang::CodeGen::CodeGenFunction::Builder, clang::CodeGen::CGBuilderTy::CreateGEP(), clang::CodeGen::CodeGenFunction::EmitCheckedInBoundsGEP(), clang::CodeGen::Address::emitRawPointer(), clang::CodeGen::CodeGenFunction::getLangOpts(), and clang::CodeGen::CodeGenFunction::NotSubtraction.
|
static |
Definition at line 4930 of file CGExpr.cpp.
References clang::ast_matchers::arrayType, clang::CodeGen::CodeGenFunction::Builder, clang::cast(), clang::CodeGen::CodeGenFunction::ConvertTypeForMem(), emitArraySubscriptGEP(), clang::CodeGen::Address::emitRawPointer(), clang::CodeGen::Address::getAlignment(), getArrayElementAlign(), clang::ASTContext::getAsVariableArrayType(), clang::CodeGen::CodeGenFunction::getContext(), clang::CodeGen::CodeGenFunction::getDebugInfo(), clang::CodeGen::Address::getElementType(), clang::CodeGenUtils::getFixedSizeElementType(), clang::CodeGen::CGDebugInfo::getOrCreateStandaloneType(), clang::ASTContext::getTypeSizeInChars(), hasBPFPreserveStaticOffset(), clang::isa(), clang::CodeGen::CodeGenFunction::IsInPreservedAIRegion, IsPreserveAIArrayBase(), and wrapWithBPFPreserveStaticOffset().
|
static |
Definition at line 4823 of file CGExpr.cpp.
References clang::CodeGen::CodeGenFunction::Builder, clang::CodeGen::CGBuilderTy::CreateGEP(), clang::CodeGen::CodeGenFunction::EmitCheckedInBoundsGEP(), clang::CodeGen::CodeGenFunction::getLangOpts(), and clang::CodeGen::CodeGenFunction::NotSubtraction.
Referenced by clang::CodeGen::CodeGenFunction::EmitArraySectionExpr(), clang::CodeGen::CodeGenFunction::EmitArraySubscriptExpr(), and emitArraySubscriptGEP().
|
static |
Definition at line 3544 of file CGExpr.cpp.
References clang::CodeGen::CodeGenFunction::EmitLValueForLambdaField().
Referenced by clang::CodeGen::CodeGenFunction::EmitDeclRefLValue().
|
static |
Definition at line 4249 of file CGExpr.cpp.
References clang::CodeGen::CodeGenFunction::Builder, clang::CodeGen::CodeGenFunction::CGM, clang::CodeGen::CodeGenModule::CreateRuntimeFunction(), clang::CodeGen::CodeGenFunction::CurCodeDecl, clang::CodeGen::CodeGenFunction::EmitNounwindRuntimeCall(), clang::CodeGen::CodeGenModule::getCodeGenOpts(), clang::CodeGen::CodeGenFunction::getLLVMContext(), clang::Decl::hasAttr(), clang::CodeGenOptions::isOptimizedBuild(), and SanitizerHandlers.
Referenced by clang::CodeGen::CodeGenFunction::EmitCheck().
|
static |
Definition at line 3387 of file CGExpr.cpp.
References clang::Addr, clang::CodeGen::CodeGenFunction::CGM, clang::CodeGen::CodeGenFunction::EmitLoadOfPointer(), clang::CodeGen::CGOpenMPRuntime::getAddrOfDeclareTargetVar(), clang::CodeGen::CodeGenFunction::getContext(), clang::CodeGen::CodeGenModule::getOpenMPRuntime(), clang::ASTContext::getPointerType(), clang::ValueDecl::getType(), clang::CodeGen::CGOpenMPRuntime::hasRequiresUnifiedSharedMemory(), clang::CodeGen::Address::invalid(), and clang::T.
Referenced by EmitGlobalVarDeclLValue().
|
static |
Definition at line 6698 of file CGExpr.cpp.
References clang::ASTContext::BuiltinInfo, clang::cast(), clang::CodeGen::CodeGenFunction::CGM, clang::CodeGen::CodeGenFunction::CurFn, clang::CodeGen::CGCallee::forBuiltin(), clang::CodeGen::CGCallee::forDirect(), clang::FunctionDecl::getBuiltinID(), clang::CodeGen::CodeGenFunction::getContext(), clang::CodeGen::CodeGenModule::getCUDARuntime(), clang::GlobalDecl::getDecl(), clang::CodeGen::CGCUDARuntime::getKernelStub(), clang::CodeGen::CodeGenModule::getLangOpts(), clang::CodeGen::CodeGenModule::getMangledName(), clang::NamedDecl::getName(), clang::CodeGen::CodeGenModule::getRawFunctionPointer(), clang::Decl::hasAttr(), clang::Builtin::Context::isPredefinedLibFunction(), and clang::CodeGenUtils::onlyHasInlineBuiltinDeclaration().
Referenced by clang::CodeGen::CodeGenFunction::EmitCallee().
|
static |
Definition at line 3531 of file CGExpr.cpp.
References clang::cast(), clang::CodeGen::CodeGenFunction::CGM, clang::CodeGen::Decl, clang::CodeGen::CodeGenFunction::getContext(), clang::GlobalDecl::getDecl(), clang::ASTContext::getDeclAlign(), clang::CodeGen::CodeGenModule::getFunctionPointer(), clang::Expr::getType(), clang::Type::isCFIUncheckedCalleeFunctionType(), clang::CodeGen::CodeGenFunction::MakeAddrLValue(), and V.
Referenced by clang::CodeGen::CodeGenFunction::EmitDeclRefLValue(), and clang::CodeGen::CodeGenFunction::EmitMemberExpr().
|
static |
Named Registers are named metadata pointing to the register name which will be read from/written to as an argument to the intrinsic @llvm.read/write_register.
So far, only the name is being passed down, but other options such as register type, allocation type or even optimization options could be passed down via the metadata node.
Definition at line 3556 of file CGExpr.cpp.
References clang::Asm, clang::Decl::getAttr(), clang::CodeGen::CodeGenModule::getContext(), clang::ASTContext::getDeclAlign(), clang::CodeGen::CodeGenModule::getLLVMContext(), clang::CodeGen::CodeGenModule::getModule(), clang::ValueDecl::getType(), and clang::CodeGen::LValue::MakeGlobalReg().
Referenced by clang::CodeGen::CodeGenFunction::EmitDeclRefLValue().
|
static |
Definition at line 3471 of file CGExpr.cpp.
References clang::Addr, clang::CodeGen::CodeGenFunction::Builder, clang::CodeGen::CodeGenFunction::CGM, clang::CodeGen::CodeGenTypes::ConvertTypeForMem(), clang::CodeGen::Decl, emitDeclTargetVarDeclLValue(), clang::CodeGen::CGHLSLRuntime::emitGlobalResourceArrayAsLValue(), clang::CodeGen::CodeGenFunction::EmitLoadOfReferenceLValue(), clang::CodeGen::CGCXXABI::EmitThreadLocalVarDeclLValue(), EmitThreadPrivateVarDeclLValue(), clang::CodeGen::CodeGenModule::GetAddrOfGlobalVar(), clang::CodeGen::CodeGenFunction::getContext(), clang::CodeGen::CodeGenModule::getCXXABI(), clang::ASTContext::getDeclAlign(), clang::Expr::getExprLoc(), clang::CodeGen::CodeGenModule::getHLSLRuntime(), clang::CodeGen::CodeGenFunction::getLangOpts(), clang::VarDecl::getTLSKind(), clang::Expr::getType(), clang::ValueDecl::getType(), clang::CodeGen::CodeGenFunction::getTypes(), clang::Decl::hasAttr(), clang::Type::isHLSLResourceRecordArray(), clang::Type::isReferenceType(), clang::CodeGen::CodeGenFunction::MakeAddrLValue(), setObjCGCLValueClass(), clang::T, clang::VarDecl::TLS_Dynamic, clang::VarDecl::TLS_None, clang::CodeGen::CGCXXABI::usesThreadWrapperFunction(), and V.
Referenced by clang::CodeGen::CodeGenFunction::EmitDeclRefLValue().
|
static |
Definition at line 733 of file CGExpr.cpp.
Referenced by clang::CodeGen::CodeGenFunction::EmitTypeCheck().
|
static |
Definition at line 2507 of file CGExpr.cpp.
References clang::Addr, clang::CodeGen::CodeGenFunction::Builder, clang::CodeGen::CodeGenFunction::CGM, clang::CodeGen::CGHLSLRuntime::createBufferMatrixTempAddress(), clang::CodeGen::CodeGenFunction::EmitLoadOfScalar(), clang::CodeGen::RValue::get(), clang::CodeGen::CodeGenModule::getHLSLRuntime(), clang::CodeGen::CodeGenFunction::getLangOpts(), clang::hlsl_constant, clang::isMatrixRowMajor(), and MaybeConvertMatrixAddress().
Referenced by clang::CodeGen::CodeGenFunction::EmitLoadOfLValue().
|
static |
Emit the operand of a glvalue conditional operator.
This is either a glvalue or a (possibly-parenthesized) throw-expression. If this is a throw, no LValue is returned and the current block has been terminated.
Definition at line 6191 of file CGExpr.cpp.
References clang::CodeGen::CodeGenFunction::EmitCXXThrowExpr(), and clang::CodeGen::CodeGenFunction::EmitLValue().
Referenced by clang::CodeGen::CodeGenFunction::EmitConditionalOperatorLValue().
|
static |
Definition at line 5449 of file CGExpr.cpp.
References clang::Addr, clang::CodeGen::CodeGenFunction::Builder, clang::CodeGen::CodeGenFunction::CGM, clang::CodeGen::CodeGenFunction::ConvertType(), clang::CodeGen::CodeGenFunction::ConvertTypeForMem(), clang::CodeGen::CGBuilderTy::CreateConstArrayGEP(), clang::CodeGen::CGBuilderTy::CreateLoad(), clang::CodeGen::CodeGenFunction::EmitArraySectionExpr(), clang::CodeGen::CodeGenFunction::EmitPointerWithAlignment(), clang::CodeGen::CodeGenModule::getNaturalTypeAlignment(), clang::isa(), clang::Type::isArrayType(), clang::Type::isVariableArrayType(), and clang::CodeGen::CodeGenModule::mergeTBAAInfoForCast().
Referenced by clang::CodeGen::CodeGenFunction::EmitArraySectionExpr().
|
static |
Emit pointer + index arithmetic.
Definition at line 1485 of file CGExpr.cpp.
References clang::CodeGen::CodeGenFunction::CGM, clang::CodeGen::CodeGenFunction::ConvertTypeForMem(), clang::CodeGen::CodeGenFunction::EmitPointerArithmetic(), clang::CodeGen::CodeGenFunction::EmitPointerWithAlignment(), clang::CodeGen::CodeGenFunction::EmitScalarExpr(), clang::CodeGen::Address::getAlignment(), getArrayElementAlign(), clang::CodeGen::Address::getBasePointer(), clang::CodeGen::CodeGenFunction::getContext(), clang::BinaryOperator::getLHS(), clang::BinaryOperator::getOpcode(), clang::Type::getPointeeType(), clang::CodeGen::CodeGenModule::getPointerAuthInfoForPointeeType(), clang::BinaryOperator::getRHS(), clang::Expr::getType(), clang::ASTContext::getTypeSizeInChars(), clang::CodeGen::Address::invalid(), clang::BinaryOperator::isAdditiveOp(), clang::Type::isAnyPointerType(), and clang::CodeGen::NotKnownNonNull.
|
static |
Definition at line 1522 of file CGExpr.cpp.
References clang::Addr, clang::CodeGen::CodeGenFunction::authPointerToPointerCast(), clang::CodeGen::CodeGenFunction::Builder, clang::Call, clang::CodeGen::CodeGenFunction::CFITCK_UnrelatedCast, clang::CodeGen::CodeGenFunction::CGM, clang::CodeGen::CodeGenFunction::ConvertType(), clang::CodeGen::CodeGenFunction::ConvertTypeForMem(), clang::CodeGen::CGBuilderTy::CreateAddrSpaceCast(), clang::CodeGen::Decl, clang::CodeGen::CodeGenFunction::EmitArrayToPointerDecay(), clang::CodeGen::CodeGenModule::EmitExplicitCastExprType(), clang::CodeGen::CodeGenFunction::EmitLValue(), emitPointerArithmetic(), clang::CodeGen::CodeGenFunction::EmitPointerWithAlignment(), clang::CodeGen::CodeGenFunction::EmitScalarExpr(), clang::CodeGen::CodeGenFunction::EmitVTablePtrCheckForCast(), clang::CodeGen::CodeGenFunction::GetAddressOfBaseClass(), clang::CodeGen::LValueBaseInfo::getAlignmentSource(), clang::Type::getAs(), clang::CodeGen::CodeGenModule::getNaturalPointeeTypeAlignment(), clang::Type::getPointeeType(), clang::CodeGen::CodeGenModule::getTBAAAccessInfo(), clang::CodeGen::Address::getType(), clang::Expr::getType(), clang::SanitizerSet::has(), clang::Expr::IgnoreParens(), clang::isa(), clang::Type::isObjCObjectPointerType(), clang::Type::isPointerType(), clang::CodeGen::CodeGenFunction::makeNaturalAddressForPointer(), clang::CodeGen::CodeGenModule::mergeTBAAInfoForCast(), clang::CodeGen::CodeGenFunction::SanOpts, and clang::CodeGen::CodeGenFunction::ShouldNullCheckClassCastValue().
Referenced by clang::CodeGen::CodeGenFunction::EmitAtomicExpr().
|
static |
Definition at line 5930 of file CGExpr.cpp.
References clang::CodeGen::CodeGenFunction::Builder, clang::CodeGen::CodeGenFunction::CGM, clang::CodeGen::CGBuilderTy::CreatePreserveStructAccessIndex(), clang::CodeGen::CodeGenTypes::getCGRecordLayout(), clang::CodeGen::CodeGenFunction::getDebugInfo(), clang::CodeGen::CGRecordLayout::getLLVMFieldNo(), clang::CodeGen::CGDebugInfo::getOrCreatePreserveAccessInfo(), clang::FieldDecl::getParent(), and clang::CodeGen::CodeGenModule::getTypes().
Referenced by clang::CodeGen::CodeGenFunction::EmitLValueForField().
|
static |
Definition at line 7447 of file CGExpr.cpp.
References clang::CodeGen::AggValueSlot::asRValue(), clang::CodeGen::Decl, clang::CodeGen::CodeGenFunction::EmitAggExpr(), clang::CodeGen::CodeGenFunction::EmitAnyExpr(), clang::CodeGen::CodeGenFunction::EmitIgnoredExpr(), clang::CodeGen::CodeGenFunction::EmitLValue(), clang::CodeGen::AggValueSlot::getAddress(), clang::PseudoObjectExpr::getResultExpr(), clang::CodeGen::Address::getType(), clang::CodeGen::CodeGenFunction::hasAggregateEvaluationKind(), clang::Expr::isPRValue(), clang::CodeGen::CodeGenFunction::MakeAddrLValue(), clang::PseudoObjectExpr::semantics_begin(), and clang::PseudoObjectExpr::semantics_end().
Referenced by clang::CodeGen::CodeGenFunction::EmitPseudoObjectLValue(), and clang::CodeGen::CodeGenFunction::EmitPseudoObjectRValue().
|
static |
Drill down to the storage of a field without walking into reference types, and without respect for pointer field protection.
The resulting address doesn't necessarily have the right type.
Definition at line 5890 of file CGExpr.cpp.
References clang::CodeGen::CodeGenFunction::Builder, clang::CodeGen::CodeGenFunction::CGM, clang::CodeGen::CGBuilderTy::CreateConstGEP2_32(), clang::CodeGen::CGBuilderTy::CreateStructGEP(), emitAddrOfZeroSizeField(), clang::CodeGen::Address::emitRawPointer(), clang::CodeGen::Address::getAlignment(), clang::CodeGen::CodeGenTypes::getCGRecordLayout(), clang::CodeGen::CodeGenFunction::getContext(), clang::CodeGen::Address::getElementType(), clang::CodeGen::CodeGenFunction::getLangOpts(), clang::CodeGen::CGRecordLayout::getLLVMFieldNo(), clang::CodeGen::CGRecordLayout::getLLVMType(), clang::NamedDecl::getName(), clang::FieldDecl::getParent(), clang::CodeGen::CodeGenModule::getTypes(), and clang::CodeGenUtils::isEmptyFieldForLayout().
Referenced by emitAddrOfFieldStorage().
|
static |
Definition at line 2358 of file CGExpr.cpp.
References clang::Addr, clang::CodeGen::CodeGenFunction::Builder, clang::CodeGen::CodeGenFunction::EmitStoreOfScalar(), clang::CodeGen::CodeGenFunction::getLangOpts(), clang::isMatrixRowMajor(), and MaybeConvertMatrixAddress().
Referenced by clang::CodeGen::CodeGenFunction::EmitMatrixElementExpr(), and clang::CodeGen::CodeGenFunction::EmitStoreOfScalar().
|
static |
Definition at line 3373 of file CGExpr.cpp.
References clang::Addr, clang::CodeGen::CodeGenFunction::CGM, clang::CodeGen::Decl, clang::CodeGen::CGOpenMPRuntime::getAddrOfThreadPrivate(), clang::CodeGen::CodeGenFunction::OMPBuilderCBHelpers::getAddrOfThreadPrivate(), clang::CodeGen::CodeGenModule::getLangOpts(), clang::CodeGen::CodeGenModule::getOpenMPRuntime(), clang::CodeGen::CodeGenFunction::MakeAddrLValue(), and clang::T.
Referenced by clang::CodeGen::CodeGenFunction::EmitDeclRefLValue(), and EmitGlobalVarDeclLValue().
|
static |
Returns the qualified name of D for use as the function name in !alloc_token metadata, or "" if D is null or not a NamedDecl.
Definition at line 1350 of file CGExpr.cpp.
References clang::PrintingPolicy::All, clang::PrintingPolicy::AnonymousTagNameStyle, clang::ASTContext::getLangOpts(), clang::PrintingPolicy::Plain, and clang::PrintingPolicy::SuppressInlineNamespace.
Referenced by clang::CodeGen::CodeGenFunction::buildAllocToken().
|
static |
Definition at line 1471 of file CGExpr.cpp.
References clang::CharUnits::alignmentAtOffset(), and clang::CharUnits::alignmentOfArrayElement().
|
static |
If Base is known to point to the start of an array, return the length of that array.
Return 0 if the length cannot be determined.
Definition at line 1025 of file CGExpr.cpp.
References clang::CodeGen::CodeGenFunction::Builder, clang::Type::castAsArrayTypeUnsafe(), clang::CodeGen::CodeGenFunction::getContext(), clang::CodeGen::CodeGenFunction::getVLASize(), clang::CodeGen::CodeGenFunction::LoadPassedObjectSize(), and clang::CodeGen::CodeGenFunction::VlaSizePair::NumElts.
Referenced by clang::CodeGen::CodeGenFunction::EmitBoundsCheck().
|
static |
The offset of a field from the beginning of the record.
Definition at line 1197 of file CGExpr.cpp.
References clang::RecordDecl::fields(), clang::Type::getAsRecordDecl(), clang::ASTContext::getASTRecordLayout(), clang::CodeGen::CodeGenFunction::getContext(), clang::ASTRecordLayout::getFieldOffset(), getFieldOffsetInBits(), int64_t, clang::Type::isRecordType(), and clang::TagDecl::isUnion().
Referenced by clang::CodeGen::CodeGenFunction::GetCountedByFieldExprGEP(), getFieldOffsetInBits(), and getOffsetDifferenceInBits().
|
static |
Definition at line 6752 of file CGExpr.cpp.
References clang::Decl::getAttr(), and clang::Stub.
Referenced by clang::CodeGen::CodeGenFunction::EmitCallee().
|
static |
Returns the relative offset difference between FD1 and FD2.
Both fields must be within the same struct.
Definition at line 5005 of file CGExpr.cpp.
References getFieldOffsetInBits(), clang::DeclContext::getOuterLexicalRecordContext(), clang::FieldDecl::getParent(), and int64_t.
Referenced by clang::CodeGen::CodeGenFunction::EmitCountedByBoundsChecking().
|
static |
Definition at line 2085 of file CGExpr.cpp.
References clang::Type::getAsEnumDecl(), clang::CodeGen::CodeGenFunction::getContext(), clang::CodeGen::CodeGenFunction::getLangOpts(), clang::ASTContext::getTypeSize(), and clang::Min.
Referenced by clang::CodeGen::CodeGenFunction::EmitScalarRangeCheck().
|
static |
Definition at line 4226 of file CGExpr.cpp.
Referenced by clang::CodeGen::CodeGenFunction::EmitCheck().
|
static |
Definition at line 99 of file CGExpr.cpp.
References LIST_SANITIZER_CHECKS.
Referenced by clang::CodeGen::CodeGenFunction::EmitTrapCheck().
|
static |
Definition at line 5943 of file CGExpr.cpp.
References clang::RecordDecl::fields(), clang::Type::getAsCXXRecordDecl(), and hasAnyVptr().
Referenced by clang::CodeGen::CodeGenFunction::EmitLValueForField(), and hasAnyVptr().
Definition at line 4869 of file CGExpr.cpp.
References clang::Type::getAsRecordDecl(), clang::Type::getPointeeType(), clang::Expr::getType(), hasBPFPreserveStaticOffset(), and clang::QualType::isNull().
|
static |
Definition at line 4865 of file CGExpr.cpp.
References clang::Decl::hasAttr().
Referenced by emitArraySubscriptGEP(), clang::CodeGen::CodeGenFunction::EmitLValueForField(), and hasBPFPreserveStaticOffset().
|
static |
Given an array base, check whether its member access belongs to a record with preserve_access_index attribute or not.
Definition at line 4894 of file CGExpr.cpp.
References clang::CodeGen::CodeGenFunction::getDebugInfo(), clang::PointerType::getPointeeType(), clang::Type::getUnqualifiedDesugaredType(), clang::Type::hasAttr(), and clang::Expr::IgnoreImpCasts().
Referenced by emitArraySubscriptGEP().
isSimpleArrayDecayOperand - If the specified expr is a simple decay from an array to pointer, return the array subexpression.
Definition at line 4809 of file CGExpr.cpp.
References clang::FullExpr::getSubExpr(), clang::Expr::getType(), and clang::Type::isVariableArrayType().
Referenced by clang::CodeGen::CodeGenFunction::EmitArraySectionExpr(), and clang::CodeGen::CodeGenFunction::EmitArraySubscriptExpr().
|
static |
Definition at line 2327 of file CGExpr.cpp.
References clang::Addr, clang::cast(), clang::CodeGen::CodeGenFunction::getContext(), and clang::ASTContext::getLangOpts().
Referenced by EmitLoadOfMatrixLValue(), clang::CodeGen::CodeGenFunction::EmitMatrixElementExpr(), clang::CodeGen::CodeGenFunction::EmitMatrixSingleSubscriptExpr(), clang::CodeGen::CodeGenFunction::EmitMatrixSubscriptExpr(), EmitStoreOfMatrixScalar(), and clang::CodeGen::CodeGenFunction::FlattenAccessAndTypeLValue().
|
static |
Definition at line 368 of file CGExpr.cpp.
References clang::CodeGen::CGCXXABI::canCallMismatchedFunctionType(), clang::cast(), clang::CodeGen::CodeGenFunction::CGM, clang::CodeGen::CodeGenFunction::destroyARCStrongImprecise, clang::CodeGen::CodeGenFunction::destroyARCStrongPrecise, clang::CodeGen::CodeGenFunction::destroyARCWeak, clang::CodeGen::CodeGenFunction::destroyCXXObject, clang::QualType::DK_none, clang::Dtor_Complete, clang::CodeGen::EHCleanup, clang::CodeGen::Address::emitRawPointer(), clang::CodeGen::CodeGenFunction::generateDestroyHelper(), clang::CodeGen::CodeGenModule::getAddrAndTypeOfCXXStructor(), clang::CodeGen::CodeGenFunction::getARCCleanupKind(), clang::Type::getAsCXXRecordDecl(), clang::Type::getBaseElementTypeUnsafe(), clang::CodeGen::CodeGenModule::getCXXABI(), clang::MaterializeTemporaryExpr::getExtendingDecl(), clang::CodeGen::CodeGenFunction::getLangOpts(), clang::QualType::getObjCLifetime(), clang::MaterializeTemporaryExpr::getStorageDuration(), clang::Expr::getType(), clang::Decl::hasAttr(), clang::CodeGen::CGCXXABI::HasThisReturn(), clang::CXXRecordDecl::hasTrivialDestructor(), clang::CodeGen::CodeGenTypeCache::Int8PtrTy, clang::Type::isArrayType(), clang::QualType::isDestructedType(), clang::CodeGen::NormalAndEHCleanup, clang::Qualifiers::OCL_Autoreleasing, clang::Qualifiers::OCL_ExplicitNone, clang::Qualifiers::OCL_None, clang::Qualifiers::OCL_Strong, clang::Qualifiers::OCL_Weak, clang::CodeGen::CodeGenFunction::pushDestroy(), clang::CodeGen::CodeGenFunction::pushLifetimeExtendedDestroy(), clang::CodeGen::CGCXXABI::registerGlobalDtor(), clang::SD_Automatic, clang::SD_Dynamic, clang::SD_FullExpression, clang::SD_Static, and clang::SD_Thread.
|
static |
Returns true if Field is reachable from RD either as a direct field or through a chain of nested record fields (including anonymous structs/unions).
This mirrors the path that getFieldOffsetInBits walks, and is used to identify the right anchor expression in Base.
Definition at line 1070 of file CGExpr.cpp.
References clang::RecordDecl::fields(), clang::Type::getAsRecordDecl(), clang::Type::isRecordType(), and RecordContainsField().
Referenced by RecordContainsField().
|
static |
Definition at line 3276 of file CGExpr.cpp.
References clang::cast(), clang::Type::castAs(), clang::ASTContext::getLangOpts(), getPointeeType(), clang::Expr::getType(), clang::isa(), clang::Type::isArrayType(), clang::Type::isPointerType(), clang::Type::isRecordType(), clang::LangOptionsBase::NonGC, setObjCGCLValueClass(), and clang::VarDecl::TLS_None.
Referenced by clang::CodeGen::CodeGenFunction::EmitArraySubscriptExpr(), clang::CodeGen::CodeGenFunction::EmitDeclRefLValue(), EmitGlobalVarDeclLValue(), clang::CodeGen::CodeGenFunction::EmitMemberExpr(), clang::CodeGen::CodeGenFunction::EmitObjCIvarRefLValue(), and setObjCGCLValueClass().
|
static |
|
static |
Definition at line 4881 of file CGExpr.cpp.
References clang::Addr, clang::CodeGen::CodeGenFunction::Builder, clang::Call, clang::CodeGen::CodeGenFunction::CGM, clang::CodeGen::CodeGenModule::getIntrinsic(), clang::CodeGen::CodeGenFunction::getTarget(), clang::TargetInfo::getTriple(), and clang::CodeGen::CodeGenFunction::IsInPreserveFieldInfo.
Referenced by emitArraySubscriptGEP(), and clang::CodeGen::CodeGenFunction::EmitLValueForField().
| const SanitizerHandlerInfo SanitizerHandlers[] |
Definition at line 4243 of file CGExpr.cpp.
Referenced by clang::CodeGen::CodeGenFunction::EmitCheck(), and emitCheckHandlerCall().