clang 19.0.0git
Namespaces | Macros | Functions
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/Frontend/OpenMP/OMPIRBuilder.h"
#include "llvm/IR/DataLayout.h"
#include "llvm/IR/Dominators.h"
#include "llvm/IR/FPEnv.h"
#include "llvm/IR/IntrinsicInst.h"
#include "llvm/IR/Intrinsics.h"
#include "llvm/IR/MDBuilder.h"
#include "llvm/IR/Operator.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
 YAML serialization mapping.
 

Macros

#define TYPE(name, parent)
 
#define ABSTRACT_TYPE(name, parent)
 
#define NON_CANONICAL_TYPE(name, parent)   case Type::name:
 
#define DEPENDENT_TYPE(name, parent)   case Type::name:
 
#define NON_CANONICAL_UNLESS_DEPENDENT_TYPE(name, parent)   case Type::name:
 
#define SANITIZER(NAME, ID)
 
#define TYPE(Class, Base)
 
#define ABSTRACT_TYPE(Class, Base)
 
#define NON_CANONICAL_TYPE(Class, Base)
 
#define DEPENDENT_TYPE(Class, Base)   case Type::Class:
 
#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 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)
 

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 
)    case Type::Class:

◆ DEPENDENT_TYPE [2/2]

#define DEPENDENT_TYPE (   name,
  parent 
)    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 
)    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 
)    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()

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

◆ EmitIfUsed()

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

Definition at line 327 of file CodeGenFunction.cpp.

References clang::CodeGen::CodeGenFunction::CurFn.

◆ emitNonZeroVLAInit()

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

◆ endsWithReturn()

static bool endsWithReturn ( const Decl F)
static

Determine whether the function F ends with a return stmt.

Definition at line 642 of file CodeGenFunction.cpp.

References clang::FunctionDecl::getBody().

◆ getPrologueSignature()

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

◆ matchesStlAllocatorFn()

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

Definition at line 671 of file CodeGenFunction.cpp.

References clang::ASTContext::getSizeType().

◆ shouldEmitLifetimeMarkers()

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

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

Definition at line 62 of file CodeGenFunction.cpp.

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

◆ TryMarkNoThrow()

static 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 1299 of file CodeGenFunction.cpp.