forked from OSchip/llvm-project
Wdeprecated: ApplyDebugLocation is returned by value yet if it is ever copied (rather than RVO'd) that would be broken, make it movable instead
llvm-svn: 244838
This commit is contained in:
parent
3f3af2cf74
commit
d7057d9e52
|
@ -56,54 +56,63 @@ CGDebugInfo::~CGDebugInfo() {
|
|||
|
||||
ApplyDebugLocation::ApplyDebugLocation(CodeGenFunction &CGF,
|
||||
SourceLocation TemporaryLocation)
|
||||
: CGF(CGF) {
|
||||
: CGF(&CGF) {
|
||||
init(TemporaryLocation);
|
||||
}
|
||||
|
||||
ApplyDebugLocation::ApplyDebugLocation(CodeGenFunction &CGF,
|
||||
bool DefaultToEmpty,
|
||||
SourceLocation TemporaryLocation)
|
||||
: CGF(CGF) {
|
||||
: CGF(&CGF) {
|
||||
init(TemporaryLocation, DefaultToEmpty);
|
||||
}
|
||||
|
||||
void ApplyDebugLocation::init(SourceLocation TemporaryLocation,
|
||||
bool DefaultToEmpty) {
|
||||
if (auto *DI = CGF.getDebugInfo()) {
|
||||
OriginalLocation = CGF.Builder.getCurrentDebugLocation();
|
||||
if (TemporaryLocation.isInvalid()) {
|
||||
if (DefaultToEmpty)
|
||||
CGF.Builder.SetCurrentDebugLocation(llvm::DebugLoc());
|
||||
else {
|
||||
// Construct a location that has a valid scope, but no line info.
|
||||
assert(!DI->LexicalBlockStack.empty());
|
||||
CGF.Builder.SetCurrentDebugLocation(
|
||||
llvm::DebugLoc::get(0, 0, DI->LexicalBlockStack.back()));
|
||||
}
|
||||
} else
|
||||
DI->EmitLocation(CGF.Builder, TemporaryLocation);
|
||||
auto *DI = CGF->getDebugInfo();
|
||||
if (!DI) {
|
||||
CGF = nullptr;
|
||||
return;
|
||||
}
|
||||
|
||||
OriginalLocation = CGF->Builder.getCurrentDebugLocation();
|
||||
if (TemporaryLocation.isValid()) {
|
||||
DI->EmitLocation(CGF->Builder, TemporaryLocation);
|
||||
return;
|
||||
}
|
||||
|
||||
if (DefaultToEmpty) {
|
||||
CGF->Builder.SetCurrentDebugLocation(llvm::DebugLoc());
|
||||
return;
|
||||
}
|
||||
|
||||
// Construct a location that has a valid scope, but no line info.
|
||||
assert(!DI->LexicalBlockStack.empty());
|
||||
CGF->Builder.SetCurrentDebugLocation(
|
||||
llvm::DebugLoc::get(0, 0, DI->LexicalBlockStack.back()));
|
||||
}
|
||||
|
||||
ApplyDebugLocation::ApplyDebugLocation(CodeGenFunction &CGF, const Expr *E)
|
||||
: CGF(CGF) {
|
||||
: CGF(&CGF) {
|
||||
init(E->getExprLoc());
|
||||
}
|
||||
|
||||
ApplyDebugLocation::ApplyDebugLocation(CodeGenFunction &CGF, llvm::DebugLoc Loc)
|
||||
: CGF(CGF) {
|
||||
if (CGF.getDebugInfo()) {
|
||||
OriginalLocation = CGF.Builder.getCurrentDebugLocation();
|
||||
if (Loc)
|
||||
CGF.Builder.SetCurrentDebugLocation(std::move(Loc));
|
||||
: CGF(&CGF) {
|
||||
if (!CGF.getDebugInfo()) {
|
||||
this->CGF = nullptr;
|
||||
return;
|
||||
}
|
||||
OriginalLocation = CGF.Builder.getCurrentDebugLocation();
|
||||
if (Loc)
|
||||
CGF.Builder.SetCurrentDebugLocation(std::move(Loc));
|
||||
}
|
||||
|
||||
ApplyDebugLocation::~ApplyDebugLocation() {
|
||||
// Query CGF so the location isn't overwritten when location updates are
|
||||
// temporarily disabled (for C++ default function arguments)
|
||||
if (CGF.getDebugInfo())
|
||||
CGF.Builder.SetCurrentDebugLocation(std::move(OriginalLocation));
|
||||
if (CGF)
|
||||
CGF->Builder.SetCurrentDebugLocation(std::move(OriginalLocation));
|
||||
}
|
||||
|
||||
void CGDebugInfo::setLocation(SourceLocation Loc) {
|
||||
|
|
|
@ -502,13 +502,16 @@ private:
|
|||
SourceLocation TemporaryLocation);
|
||||
|
||||
llvm::DebugLoc OriginalLocation;
|
||||
CodeGenFunction &CGF;
|
||||
CodeGenFunction *CGF;
|
||||
|
||||
public:
|
||||
/// Set the location to the (valid) TemporaryLocation.
|
||||
ApplyDebugLocation(CodeGenFunction &CGF, SourceLocation TemporaryLocation);
|
||||
ApplyDebugLocation(CodeGenFunction &CGF, const Expr *E);
|
||||
ApplyDebugLocation(CodeGenFunction &CGF, llvm::DebugLoc Loc);
|
||||
ApplyDebugLocation(ApplyDebugLocation &&Other) : CGF(Other.CGF) {
|
||||
Other.CGF = nullptr;
|
||||
}
|
||||
|
||||
~ApplyDebugLocation();
|
||||
|
||||
|
|
Loading…
Reference in New Issue