clang 22.0.0git
CodeGenFunction.cpp File Reference
#include "CodeGenFunction.h"
#include "CGBlocks.h"
#include "CGCUDARuntime.h"
#include "CGCXXABI.h"
#include "CGCleanup.h"
#include "CGDebugInfo.h"
#include "CGHLSLRuntime.h"
#include "CGOpenMPRuntime.h"
#include "CodeGenModule.h"
#include "CodeGenPGO.h"
#include "TargetInfo.h"
#include "clang/AST/ASTContext.h"
#include "clang/AST/ASTLambda.h"
#include "clang/AST/Attr.h"
#include "clang/AST/Decl.h"
#include "clang/AST/DeclCXX.h"
#include "clang/AST/Expr.h"
#include "clang/AST/StmtCXX.h"
#include "clang/AST/StmtObjC.h"
#include "clang/Basic/Builtins.h"
#include "clang/Basic/CodeGenOptions.h"
#include "clang/Basic/TargetBuiltins.h"
#include "clang/Basic/TargetInfo.h"
#include "clang/CodeGen/CGFunctionInfo.h"
#include "clang/Frontend/FrontendDiagnostic.h"
#include "llvm/ADT/ArrayRef.h"
#include "llvm/ADT/ScopeExit.h"
#include "llvm/Frontend/OpenMP/OMPIRBuilder.h"
#include "llvm/IR/DataLayout.h"
#include "llvm/IR/Dominators.h"
#include "llvm/IR/FPEnv.h"
#include "llvm/IR/Instruction.h"
#include "llvm/IR/IntrinsicInst.h"
#include "llvm/IR/Intrinsics.h"
#include "llvm/IR/MDBuilder.h"
#include "llvm/Support/CRC.h"
#include "llvm/Support/xxhash.h"
#include "llvm/Transforms/Scalar/LowerExpectIntrinsic.h"
#include "llvm/Transforms/Utils/PromoteMemToReg.h"
#include <optional>
#include "clang/AST/TypeNodes.inc"
#include "clang/Basic/Sanitizers.def"

Go to the source code of this file.

Namespaces

namespace  llvm
 Diagnostic wrappers for TextAPI types for error reporting.

Macros

#define TYPE(name, parent)
#define ABSTRACT_TYPE(name, parent)
#define NON_CANONICAL_TYPE(name, parent)
#define DEPENDENT_TYPE(name, parent)
#define NON_CANONICAL_UNLESS_DEPENDENT_TYPE(name, parent)
#define SANITIZER(NAME, ID)
#define TYPE(Class, Base)
#define ABSTRACT_TYPE(Class, Base)
#define NON_CANONICAL_TYPE(Class, Base)
#define DEPENDENT_TYPE(Class, Base)
#define NON_CANONICAL_UNLESS_DEPENDENT_TYPE(Class, Base)

Functions

static bool shouldEmitLifetimeMarkers (const CodeGenOptions &CGOpts, const LangOptions &LangOpts)
 shouldEmitLifetimeMarkers - Decide whether we need emit the life-time markers.
static LValue makeNaturalAlignAddrLValue (llvm::Value *V, QualType T, bool ForPointeeType, bool MightBeSigned, CodeGenFunction &CGF, KnownNonNull_t IsKnownNonNull=NotKnownNonNull)
static void EmitIfUsed (CodeGenFunction &CGF, llvm::BasicBlock *BB)
static bool endsWithReturn (const Decl *F)
 Determine whether the function F ends with a return stmt.
static bool matchesStlAllocatorFn (const Decl *D, const ASTContext &Ctx)
static llvm::Constant * getPrologueSignature (CodeGenModule &CGM, const FunctionDecl *FD)
 Return the UBSan prologue signature for FD if one is available.
static void TryMarkNoThrow (llvm::Function *F)
 Tries to mark the given function nounwind based on the non-existence of any throwing calls within it.
static void emitNonZeroVLAInit (CodeGenFunction &CGF, QualType baseType, Address dest, Address src, llvm::Value *sizeInChars)
 emitNonZeroVLAInit - Emit the "zero" initialization of a variable-length array whose elements have a non-zero bit-pattern.
static void CreateMultiVersionResolverReturn (CodeGenModule &CGM, llvm::Function *Resolver, CGBuilderTy &Builder, llvm::Function *FuncToReturn, bool SupportsIFunc)
static llvm::ValueEmitPointerAuthCommon (CodeGenFunction &CGF, const CGPointerAuthInfo &PointerAuth, llvm::Value *Pointer, unsigned IntrinsicID)
static llvm::ValueEmitStrip (CodeGenFunction &CGF, const CGPointerAuthInfo &PointerAuth, llvm::Value *Pointer)

Macro Definition Documentation

◆ ABSTRACT_TYPE [1/2]

#define ABSTRACT_TYPE ( Class,
Base )

◆ ABSTRACT_TYPE [2/2]

#define ABSTRACT_TYPE ( name,
parent )

◆ DEPENDENT_TYPE [1/2]

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

◆ DEPENDENT_TYPE [2/2]

#define DEPENDENT_TYPE ( name,
parent )
Value:
case Type::name:

◆ NON_CANONICAL_TYPE [1/2]

#define NON_CANONICAL_TYPE ( Class,
Base )

◆ NON_CANONICAL_TYPE [2/2]

#define NON_CANONICAL_TYPE ( name,
parent )
Value:
case Type::name:

◆ NON_CANONICAL_UNLESS_DEPENDENT_TYPE [1/2]

#define NON_CANONICAL_UNLESS_DEPENDENT_TYPE ( Class,
Base )

◆ NON_CANONICAL_UNLESS_DEPENDENT_TYPE [2/2]

#define NON_CANONICAL_UNLESS_DEPENDENT_TYPE ( name,
parent )
Value:
case Type::name:

◆ SANITIZER

#define SANITIZER ( NAME,
ID )
Value:
if (SanOpts.empty()) \
break; \
if (SanOpts.has(SanitizerKind::ID)) \
if (CGM.isInNoSanitizeList(SanitizerKind::ID, Fn, Loc)) \
SanOpts.set(SanitizerKind::ID, false);

◆ TYPE [1/2]

#define TYPE ( Class,
Base )

◆ TYPE [2/2]

#define TYPE ( name,
parent )

Function Documentation

◆ CreateMultiVersionResolverReturn()

void CreateMultiVersionResolverReturn ( CodeGenModule & CGM,
llvm::Function * Resolver,
CGBuilderTy & Builder,
llvm::Function * FuncToReturn,
bool SupportsIFunc )
static

◆ EmitIfUsed()

void EmitIfUsed ( CodeGenFunction & CGF,
llvm::BasicBlock * BB )
static

◆ emitNonZeroVLAInit()

void emitNonZeroVLAInit ( CodeGenFunction & CGF,
QualType baseType,
Address dest,
Address src,
llvm::Value * sizeInChars )
static

◆ EmitPointerAuthCommon()

◆ EmitStrip()

◆ endsWithReturn()

bool endsWithReturn ( const Decl * F)
static

Determine whether the function F ends with a return stmt.

Definition at line 687 of file CodeGenFunction.cpp.

References clang::FunctionDecl::getBody(), and clang::isa().

Referenced by clang::CodeGen::CodeGenFunction::StartFunction().

◆ getPrologueSignature()

llvm::Constant * getPrologueSignature ( CodeGenModule & CGM,
const FunctionDecl * FD )
static

◆ makeNaturalAlignAddrLValue()

◆ matchesStlAllocatorFn()

bool matchesStlAllocatorFn ( const Decl * D,
const ASTContext & Ctx )
static

◆ shouldEmitLifetimeMarkers()

bool shouldEmitLifetimeMarkers ( const CodeGenOptions & CGOpts,
const LangOptions & LangOpts )
static

shouldEmitLifetimeMarkers - Decide whether we need emit the life-time markers.

Definition at line 63 of file CodeGenFunction.cpp.

References clang::SanitizerSet::has(), and clang::LangOptions::Sanitize.

Referenced by clang::CodeGen::CodeGenFunction::CodeGenFunction().

◆ TryMarkNoThrow()

void TryMarkNoThrow ( llvm::Function * F)
static

Tries to mark the given function nounwind based on the non-existence of any throwing calls within it.

We believe this is lightweight enough to do at -O0.

Definition at line 1409 of file CodeGenFunction.cpp.

Referenced by clang::CodeGen::CodeGenFunction::GenerateCode().