diff options
Diffstat (limited to 'llvm/lib')
| -rw-r--r-- | llvm/lib/Analysis/DebugInfo.cpp | 11 | ||||
| -rw-r--r-- | llvm/lib/CodeGen/SelectionDAG/SelectionDAGBuilder.cpp | 6 | 
2 files changed, 13 insertions, 4 deletions
| diff --git a/llvm/lib/Analysis/DebugInfo.cpp b/llvm/lib/Analysis/DebugInfo.cpp index 8ba19020b09..d33bb6042b2 100644 --- a/llvm/lib/Analysis/DebugInfo.cpp +++ b/llvm/lib/Analysis/DebugInfo.cpp @@ -402,6 +402,17 @@ uint64_t DIDerivedType::getOriginalTypeSize() const {    return getSizeInBits();  } +/// isInlinedFnArgument - Return trule if this variable provides debugging +/// information for an inlined function arguments. +bool DIVariable::isInlinedFnArgument(const Function *CurFn) { +  assert(CurFn && "Invalid function"); +  if (!getContext().isSubprogram()) +    return false; +  // This variable is not inlined function argument if its scope  +  // does not describe current function. +  return !(DISubprogram(getContext().getNode()).describes(CurFn)); +} +  /// describes - Return true if this subprogram provides debugging  /// information for the function F.  bool DISubprogram::describes(const Function *F) { diff --git a/llvm/lib/CodeGen/SelectionDAG/SelectionDAGBuilder.cpp b/llvm/lib/CodeGen/SelectionDAG/SelectionDAGBuilder.cpp index 3f81268c91a..791482906d8 100644 --- a/llvm/lib/CodeGen/SelectionDAG/SelectionDAGBuilder.cpp +++ b/llvm/lib/CodeGen/SelectionDAG/SelectionDAGBuilder.cpp @@ -3691,14 +3691,12 @@ SelectionDAGBuilder::EmitFuncArgumentDbgValue(const DbgValueInst &DI,    if (!isa<Argument>(V))      return false; +  MachineFunction &MF = DAG.getMachineFunction();    // Ignore inlined function arguments here.    DIVariable DV(Variable); -  if (DV.getContext().isSubprogram() -      && DISubprogram(DV.getContext().getNode()).getLinkageName() -      != cast<Argument>(V)->getParent()->getName()) +  if (DV.isInlinedFnArgument(MF.getFunction()))      return false; -  MachineFunction &MF = DAG.getMachineFunction();    MachineBasicBlock *MBB = FuncInfo.MBBMap[DI.getParent()];    if (MBB != &MF.front())      return false; | 

