Lines Matching defs:CGM

26 static llvm::Constant *getAllocateExceptionFn(CodeGenModule &CGM) {
30 llvm::FunctionType::get(CGM.Int8PtrTy, CGM.SizeTy, /*IsVarArgs=*/false);
32 return CGM.CreateRuntimeFunction(FTy, "__cxa_allocate_exception");
35 static llvm::Constant *getFreeExceptionFn(CodeGenModule &CGM) {
39 llvm::FunctionType::get(CGM.VoidTy, CGM.Int8PtrTy, /*IsVarArgs=*/false);
41 return CGM.CreateRuntimeFunction(FTy, "__cxa_free_exception");
44 static llvm::Constant *getThrowFn(CodeGenModule &CGM) {
48 llvm::Type *Args[3] = { CGM.Int8PtrTy, CGM.Int8PtrTy, CGM.Int8PtrTy };
50 llvm::FunctionType::get(CGM.VoidTy, Args, /*IsVarArgs=*/false);
52 return CGM.CreateRuntimeFunction(FTy, "__cxa_throw");
55 static llvm::Constant *getReThrowFn(CodeGenModule &CGM) {
59 llvm::FunctionType::get(CGM.VoidTy, /*IsVarArgs=*/false);
61 return CGM.CreateRuntimeFunction(FTy, "__cxa_rethrow");
64 static llvm::Constant *getGetExceptionPtrFn(CodeGenModule &CGM) {
68 llvm::FunctionType::get(CGM.Int8PtrTy, CGM.Int8PtrTy, /*IsVarArgs=*/false);
70 return CGM.CreateRuntimeFunction(FTy, "__cxa_get_exception_ptr");
73 static llvm::Constant *getBeginCatchFn(CodeGenModule &CGM) {
77 llvm::FunctionType::get(CGM.Int8PtrTy, CGM.Int8PtrTy, /*IsVarArgs=*/false);
79 return CGM.CreateRuntimeFunction(FTy, "__cxa_begin_catch");
82 static llvm::Constant *getEndCatchFn(CodeGenModule &CGM) {
86 llvm::FunctionType::get(CGM.VoidTy, /*IsVarArgs=*/false);
88 return CGM.CreateRuntimeFunction(FTy, "__cxa_end_catch");
91 static llvm::Constant *getUnexpectedFn(CodeGenModule &CGM) {
95 llvm::FunctionType::get(CGM.VoidTy, CGM.Int8PtrTy, /*IsVarArgs=*/false);
97 return CGM.CreateRuntimeFunction(FTy, "__cxa_call_unexpected");
100 static llvm::Constant *getTerminateFn(CodeGenModule &CGM) {
104 llvm::FunctionType::get(CGM.VoidTy, /*IsVarArgs=*/false);
109 if (CGM.getLangOpts().CPlusPlus)
111 else if (CGM.getLangOpts().ObjC1 &&
112 CGM.getLangOpts().ObjCRuntime.hasTerminate())
116 return CGM.CreateRuntimeFunction(FTy, name);
119 static llvm::Constant *getCatchallRethrowFn(CodeGenModule &CGM,
122 llvm::FunctionType::get(CGM.VoidTy, CGM.Int8PtrTy, /*IsVarArgs=*/false);
124 return CGM.CreateRuntimeFunction(FTy, Name);
234 static llvm::Constant *getPersonalityFn(CodeGenModule &CGM,
237 CGM.CreateRuntimeFunction(llvm::FunctionType::get(CGM.Int32Ty, true),
242 static llvm::Constant *getOpaquePersonalityFn(CodeGenModule &CGM,
244 llvm::Constant *Fn = getPersonalityFn(CGM, Personality);
245 return llvm::ConstantExpr::getBitCast(Fn, CGM.Int8PtrTy);
349 CGF.EmitNounwindRuntimeCall(getFreeExceptionFn(CGF.CGM), exn);
406 if (CGM.getTarget().getTriple().isWindowsMSVCEnvironment()) {
412 EmitNoreturnRuntimeCallOrInvoke(getReThrowFn(CGM),
429 CGM.getObjCRuntime().EmitThrowStmt(*this, S, false);
441 llvm::Constant *AllocExceptionFn = getAllocateExceptionFn(CGM);
450 llvm::Constant *TypeInfo = CGM.GetAddrOfRTTIDescriptor(ThrowType,
460 Dtor = CGM.GetAddrOfCXXDestructor(DtorD, Dtor_Complete);
467 EmitNoreturnRuntimeCallOrInvoke(getThrowFn(CGM), args);
476 if (!CGM.getLangOpts().CXXExceptions)
505 llvm::Value *EHType = CGM.GetAddrOfRTTIDescriptor(ExceptType,
544 CGF.EmitRuntimeCall(getUnexpectedFn(CGF.CGM), exn)
550 if (!CGM.getLangOpts().CXXExceptions)
579 if (CGM.getTarget().getTriple().isWindowsMSVCEnvironment()) {
609 TypeInfo = CGM.getObjCRuntime().GetEHType(CaughtType);
611 TypeInfo = CGM.GetAddrOfRTTIDescriptor(CaughtType, /*ForEH=*/true);
684 if (!CGM.getLangOpts().Exceptions)
735 getOpaquePersonalityFn(CGM, personality), 0);
867 CGF.EmitNounwindRuntimeCall(getEndCatchFn(CGF.CGM));
871 CGF.EmitRuntimeCallOrInvoke(getEndCatchFn(CGF.CGM));
884 CGF.EmitNounwindRuntimeCall(getBeginCatchFn(CGF.CGM), Exn);
901 CGF.CGM.getContext().getCanonicalType(CatchParam.getType());
926 CGF.CGM.getTargetCodeGenInfo().getSizeOfUnwindException();
1034 CGF.EmitNounwindRuntimeCall(getGetExceptionPtrFn(CGF.CGM), Exn);
1125 CGF.CGM.getIntrinsic(llvm::Intrinsic::eh_typeid_for);
1262 EmitRuntimeCallOrInvoke(getReThrowFn(CGM));
1477 static bool useClangCallTerminate(CodeGenModule &CGM) {
1479 return (CGM.getLangOpts().CPlusPlus &&
1480 CGM.getTarget().getCXXABI().isItaniumFamily());
1486 static llvm::Constant *getClangCallTerminateFn(CodeGenModule &CGM) {
1488 llvm::FunctionType::get(CGM.VoidTy, CGM.Int8PtrTy, /*IsVarArgs=*/false);
1490 CGM.CreateRuntimeFunction(fnTy, "__clang_call_terminate");
1509 llvm::BasicBlock::Create(CGM.getLLVMContext(), "", fn);
1516 llvm::CallInst *catchCall = builder.CreateCall(getBeginCatchFn(CGM), exn);
1518 catchCall->setCallingConv(CGM.getRuntimeCC());
1521 llvm::CallInst *termCall = builder.CreateCall(getTerminateFn(CGM));
1524 termCall->setCallingConv(CGM.getRuntimeCC());
1544 const EHPersonality &Personality = EHPersonality::get(CGM.getLangOpts());
1547 getOpaquePersonalityFn(CGM, Personality), 0);
1551 if (useClangCallTerminate(CGM)) {
1554 terminateCall = EmitNounwindRuntimeCall(getClangCallTerminateFn(CGM), exn);
1556 terminateCall = EmitNounwindRuntimeCall(getTerminateFn(CGM));
1578 if (useClangCallTerminate(CGM)) {
1581 terminateCall = EmitNounwindRuntimeCall(getClangCallTerminateFn(CGM), exn);
1583 terminateCall = EmitNounwindRuntimeCall(getTerminateFn(CGM));
1603 const EHPersonality &Personality = EHPersonality::get(CGM.getLangOpts());
1609 EmitRuntimeCall(getCatchallRethrowFn(CGM, RethrowName),
1633 CGM.ErrorUnsupported(&S, "SEH __try");
1637 CGM.ErrorUnsupported(&S, "SEH __leave");