DebugInfo: Refactor default arg handling into a common place (instead of handling in repeatedly for aggregate, complex, and scalar types)
llvm-svn: 228591
This commit is contained in:
parent
bf0f2b9b3a
commit
38b2591469
|
@ -2734,8 +2734,22 @@ struct DestroyUnpassedArg : EHScopeStack::Cleanup {
|
|||
|
||||
}
|
||||
|
||||
struct DisableDebugLocationUpdates {
|
||||
CodeGenFunction &CGF;
|
||||
bool disabledDebugInfo;
|
||||
DisableDebugLocationUpdates(CodeGenFunction &CGF, const Expr *E) : CGF(CGF) {
|
||||
if ((disabledDebugInfo = isa<CXXDefaultArgExpr>(E) && CGF.getDebugInfo()))
|
||||
CGF.disableDebugInfo();
|
||||
}
|
||||
~DisableDebugLocationUpdates() {
|
||||
if (disabledDebugInfo)
|
||||
CGF.enableDebugInfo();
|
||||
}
|
||||
};
|
||||
|
||||
void CodeGenFunction::EmitCallArg(CallArgList &args, const Expr *E,
|
||||
QualType type) {
|
||||
DisableDebugLocationUpdates Dis(*this, E);
|
||||
if (const ObjCIndirectCopyRestoreExpr *CRE
|
||||
= dyn_cast<ObjCIndirectCopyRestoreExpr>(E)) {
|
||||
assert(getLangOpts().ObjCAutoRefCount);
|
||||
|
|
|
@ -1387,12 +1387,7 @@ void CodeGenFunction::EmitAggExpr(const Expr *E, AggValueSlot Slot) {
|
|||
// Optimize the slot if possible.
|
||||
CheckAggExprForMemSetUse(Slot, E, *this);
|
||||
|
||||
bool hasDebugInfo = getDebugInfo();
|
||||
if (isa<CXXDefaultArgExpr>(E))
|
||||
disableDebugInfo();
|
||||
AggExprEmitter(*this, Slot).Visit(const_cast<Expr*>(E));
|
||||
if (isa<CXXDefaultArgExpr>(E) && hasDebugInfo)
|
||||
enableDebugInfo();
|
||||
}
|
||||
|
||||
LValue CodeGenFunction::EmitAggExprToLValue(const Expr *E) {
|
||||
|
|
|
@ -1033,14 +1033,8 @@ ComplexPairTy CodeGenFunction::EmitComplexExpr(const Expr *E, bool IgnoreReal,
|
|||
assert(E && getComplexType(E->getType()) &&
|
||||
"Invalid complex expression to emit");
|
||||
|
||||
bool hasDebugInfo = getDebugInfo();
|
||||
if (isa<CXXDefaultArgExpr>(E))
|
||||
disableDebugInfo();
|
||||
auto R = ComplexExprEmitter(*this, IgnoreReal, IgnoreImag)
|
||||
.Visit(const_cast<Expr *>(E));
|
||||
if (isa<CXXDefaultArgExpr>(E) && hasDebugInfo)
|
||||
enableDebugInfo();
|
||||
return R;
|
||||
return ComplexExprEmitter(*this, IgnoreReal, IgnoreImag)
|
||||
.Visit(const_cast<Expr *>(E));
|
||||
}
|
||||
|
||||
void CodeGenFunction::EmitComplexExprIntoLValue(const Expr *E, LValue dest,
|
||||
|
|
|
@ -3393,14 +3393,8 @@ Value *CodeGenFunction::EmitScalarExpr(const Expr *E, bool IgnoreResultAssign) {
|
|||
assert(E && hasScalarEvaluationKind(E->getType()) &&
|
||||
"Invalid scalar expression to emit");
|
||||
|
||||
bool hasDebugInfo = getDebugInfo();
|
||||
if (isa<CXXDefaultArgExpr>(E))
|
||||
disableDebugInfo();
|
||||
Value *V = ScalarExprEmitter(*this, IgnoreResultAssign)
|
||||
.Visit(const_cast<Expr*>(E));
|
||||
if (isa<CXXDefaultArgExpr>(E) && hasDebugInfo)
|
||||
enableDebugInfo();
|
||||
return V;
|
||||
return ScalarExprEmitter(*this, IgnoreResultAssign)
|
||||
.Visit(const_cast<Expr *>(E));
|
||||
}
|
||||
|
||||
/// EmitScalarConversion - Emit a conversion from the specified type to the
|
||||
|
|
Loading…
Reference in New Issue