Skip to content

Commit

Permalink
[CGDebugInfo] Simplify EmitFunctionDecl parameters, NFC
Browse files Browse the repository at this point in the history
Replace a `llvm::Function *` parameter with a bool, which seems harder
to set to the wrong value by accident.

Differential Revision: https://reviews.llvm.org/D64540

llvm-svn: 365809
  • Loading branch information
vedantk committed Jul 11, 2019
1 parent 08cb342 commit bdf8198
Show file tree
Hide file tree
Showing 2 changed files with 18 additions and 14 deletions.
23 changes: 13 additions & 10 deletions clang/lib/CodeGen/CGDebugInfo.cpp
Expand Up @@ -3621,18 +3621,19 @@ void CGDebugInfo::EmitFunctionStart(GlobalDecl GD, SourceLocation Loc,
RegionMap[D].reset(SP);
}

void CGDebugInfo::EmitFunctionDecl(GlobalDecl GD, SourceLocation Loc,
QualType FnType, llvm::Function *Fn) {
llvm::DISubprogram *CGDebugInfo::EmitFunctionDecl(GlobalDecl GD,
SourceLocation Loc,
QualType FnType,
bool IsDeclForCallSite) {
StringRef Name;
StringRef LinkageName;

const Decl *D = GD.getDecl();
if (!D)
return;
return nullptr;

llvm::DINode::DIFlags Flags = llvm::DINode::FlagZero;
llvm::DIFile *Unit = getOrCreateFile(Loc);
bool IsDeclForCallSite = Fn ? true : false;
llvm::DIScope *FDContext =
IsDeclForCallSite ? Unit : getDeclContextDescriptor(D);
llvm::DINodeArray TParamsArray;
Expand Down Expand Up @@ -3665,11 +3666,8 @@ void CGDebugInfo::EmitFunctionDecl(GlobalDecl GD, SourceLocation Loc,
FDContext, Name, LinkageName, Unit, LineNo,
getOrCreateFunctionType(D, FnType, Unit), ScopeLine, Flags, SPFlags,
TParamsArray.get(), getFunctionDeclaration(D));

if (IsDeclForCallSite)
Fn->setSubprogram(SP);

DBuilder.retainType(SP);
return SP;
}

void CGDebugInfo::EmitFuncDeclForCallSite(llvm::CallBase *CallOrInvoke,
Expand All @@ -3691,8 +3689,13 @@ void CGDebugInfo::EmitFuncDeclForCallSite(llvm::CallBase *CallOrInvoke,
if (Func->getSubprogram())
return;

if (!CalleeDecl->isStatic() && !CalleeDecl->isInlined())
EmitFunctionDecl(CalleeDecl, CalleeDecl->getLocation(), CalleeType, Func);
if (!CalleeDecl->isStatic() && !CalleeDecl->isInlined()) {
llvm::DISubprogram *SP =
EmitFunctionDecl(CalleeDecl, CalleeDecl->getLocation(), CalleeType,
/*IsDeclForCallSite=*/true);
assert(SP && "Could not find decl for callee?");
Func->setSubprogram(SP);
}
}

void CGDebugInfo::EmitInlineFunctionStart(CGBuilderTy &Builder, GlobalDecl GD) {
Expand Down
9 changes: 5 additions & 4 deletions clang/lib/CodeGen/CGDebugInfo.h
Expand Up @@ -408,10 +408,11 @@ class CGDebugInfo {
/// End an inlined function scope.
void EmitInlineFunctionEnd(CGBuilderTy &Builder);

/// Emit debug info for a function declaration.
/// \p Fn is set only when a declaration for a debug call site gets created.
void EmitFunctionDecl(GlobalDecl GD, SourceLocation Loc,
QualType FnType, llvm::Function *Fn = nullptr);
/// Emit debug info for a function declaration. Set \p IsDeclForCallSite if
/// a call site entry must reference the declaration.
llvm::DISubprogram *EmitFunctionDecl(GlobalDecl GD, SourceLocation Loc,
QualType FnType,
bool IsDeclForCallSite = false);

/// Emit debug info for an extern function being called.
/// This is needed for call site debug info.
Expand Down

0 comments on commit bdf8198

Please sign in to comment.