diff options
Diffstat (limited to 'clang/lib/CodeGen/CGCall.cpp')
| -rw-r--r-- | clang/lib/CodeGen/CGCall.cpp | 16 | 
1 files changed, 9 insertions, 7 deletions
| diff --git a/clang/lib/CodeGen/CGCall.cpp b/clang/lib/CodeGen/CGCall.cpp index aa52e1e7c51..ba273d7bbea 100644 --- a/clang/lib/CodeGen/CGCall.cpp +++ b/clang/lib/CodeGen/CGCall.cpp @@ -3800,6 +3800,8 @@ RValue CodeGenFunction::EmitCall(const CGFunctionInfo &CallInfo,    llvm::FunctionType *IRFuncTy = getTypes().GetFunctionType(CallInfo); +  const Decl *TargetDecl = Callee.getAbstractInfo().getCalleeDecl().getDecl(); +  #ifndef NDEBUG    if (!(CallInfo.isVariadic() && CallInfo.getArgStruct())) {      // For an inalloca varargs function, we don't expect CallInfo to match the @@ -4288,11 +4290,7 @@ RValue CodeGenFunction::EmitCall(const CGFunctionInfo &CallInfo,    // Apply always_inline to all calls within flatten functions.    // FIXME: should this really take priority over __try, below?    if (CurCodeDecl && CurCodeDecl->hasAttr<FlattenAttr>() && -      !(Callee.getAbstractInfo().getCalleeDecl().getDecl() && -        Callee.getAbstractInfo() -            .getCalleeDecl() -            .getDecl() -            ->hasAttr<NoInlineAttr>())) { +      !(TargetDecl && TargetDecl->hasAttr<NoInlineAttr>())) {      Attrs =          Attrs.addAttribute(getLLVMContext(), llvm::AttributeList::FunctionIndex,                             llvm::Attribute::AlwaysInline); @@ -4376,11 +4374,16 @@ RValue CodeGenFunction::EmitCall(const CGFunctionInfo &CallInfo,    // Suppress tail calls if requested.    if (llvm::CallInst *Call = dyn_cast<llvm::CallInst>(CI)) { -    const Decl *TargetDecl = Callee.getAbstractInfo().getCalleeDecl().getDecl();      if (TargetDecl && TargetDecl->hasAttr<NotTailCalledAttr>())        Call->setTailCallKind(llvm::CallInst::TCK_NoTail);    } +  // Add metadata for calls to MSAllocator functions +  // FIXME: Get the type that the return value is cast to. +  if (!DisableDebugInfo && TargetDecl && +      TargetDecl->hasAttr<MSAllocatorAttr>()) +    getDebugInfo()->addHeapAllocSiteMetadata(CI, RetTy, Loc); +    // 4. Finish the call.    // If the call doesn't return, finish the basic block and clear the @@ -4537,7 +4540,6 @@ RValue CodeGenFunction::EmitCall(const CGFunctionInfo &CallInfo,    } ();    // Emit the assume_aligned check on the return value. -  const Decl *TargetDecl = Callee.getAbstractInfo().getCalleeDecl().getDecl();    if (Ret.isScalar() && TargetDecl) {      if (const auto *AA = TargetDecl->getAttr<AssumeAlignedAttr>()) {        llvm::Value *OffsetValue = nullptr; | 

