From 3635e3830a245c25f4bcb03a28b86ffb2de25943 Mon Sep 17 00:00:00 2001 From: Brian Fiete Date: Mon, 7 Feb 2022 14:27:05 -0500 Subject: [PATCH] LLVM 13 debug info fixes --- IDEHelper/Backend/BeIRCodeGen.cpp | 3 ++- IDEHelper/Compiler/BfIRBuilder.cpp | 1 + IDEHelper/Compiler/BfModule.cpp | 28 ++++++++++++++++++---------- 3 files changed, 21 insertions(+), 11 deletions(-) diff --git a/IDEHelper/Backend/BeIRCodeGen.cpp b/IDEHelper/Backend/BeIRCodeGen.cpp index 858cb985..9046a5f5 100644 --- a/IDEHelper/Backend/BeIRCodeGen.cpp +++ b/IDEHelper/Backend/BeIRCodeGen.cpp @@ -2669,7 +2669,8 @@ void BeIRCodeGen::HandleNextCmd() CMD_PARAM(int, line); CMD_PARAM(int, column); CMD_PARAM(BeMDNode*, diScope); - CMD_PARAM(BeMDNode*, diInlinedAt); + CMD_PARAM(BeMDNode*, diInlinedAt); + BF_ASSERT(diScope != NULL); mBeModule->SetCurrentDebugLocation(line - 1, column - 1, diScope, (BeDbgLoc*)diInlinedAt); } break; diff --git a/IDEHelper/Compiler/BfIRBuilder.cpp b/IDEHelper/Compiler/BfIRBuilder.cpp index 6235b13d..332454f8 100644 --- a/IDEHelper/Compiler/BfIRBuilder.cpp +++ b/IDEHelper/Compiler/BfIRBuilder.cpp @@ -5396,6 +5396,7 @@ void BfIRBuilder::UpdateDebugLocation(BfIRValue inst) void BfIRBuilder::SetCurrentDebugLocation(int line, int column, BfIRMDNode diScope, BfIRMDNode diInlinedAt) { + BF_ASSERT(diScope); if (mDbgVerifyCodeGen && gDebugDbgLoc) { OutputDebugStrF("SetCurrentDebugLocation %d %d:%d\n", diScope.mId, line, column); diff --git a/IDEHelper/Compiler/BfModule.cpp b/IDEHelper/Compiler/BfModule.cpp index 06bbb67f..593be0f3 100644 --- a/IDEHelper/Compiler/BfModule.cpp +++ b/IDEHelper/Compiler/BfModule.cpp @@ -2614,9 +2614,13 @@ void BfModule::UpdateSrcPos(BfAstNode* astNode, BfSrcPosFlags flags, int debugLo if (mCurMethodState->mCrossingMixin) inlineAt = BfIRMDNode(); - if ((!useDIScope) && (mIsComptimeModule)) + if ((!useDIScope) && (mIsComptimeModule)) useDIScope = wantDIFile; - mBfIRBuilder->SetCurrentDebugLocation(mCurFilePosition.mCurLine + 1, column, useDIScope, inlineAt); + + if (!useDIScope) + mBfIRBuilder->ClearDebugLocation(); + else + mBfIRBuilder->SetCurrentDebugLocation(mCurFilePosition.mCurLine + 1, column, useDIScope, inlineAt); if ((flags & BfSrcPosFlag_Expression) == 0) mBfIRBuilder->CreateStatementStart(); } @@ -2639,15 +2643,19 @@ void BfModule::SetIllegalSrcPos(BfSrcPosFlags flags) { if ((mBfIRBuilder->DbgHasInfo()) && (mCurMethodState != NULL)) { - if ((mCurMethodState->mCurScope->mDIInlinedAt) && (mCompiler->mOptions.IsCodeView())) + auto curScope = mCurMethodState->mCurScope->mDIScope; + if (curScope) { - // Currently, CodeView does not record column positions so we can't use an illegal column position as an "invalid" marker - mBfIRBuilder->SetCurrentDebugLocation(0, 0, mCurMethodState->mCurScope->mDIScope, mCurMethodState->mCurScope->mDIInlinedAt); - } - else - { - // Set to whatever it previously was but at column zero, which we will know to be illegal - mBfIRBuilder->SetCurrentDebugLocation(mCurFilePosition.mCurLine + 1, 0, mCurMethodState->mCurScope->mDIScope, mCurMethodState->mCurScope->mDIInlinedAt); + if ((mCurMethodState->mCurScope->mDIInlinedAt) && (mCompiler->mOptions.IsCodeView())) + { + // Currently, CodeView does not record column positions so we can't use an illegal column position as an "invalid" marker + mBfIRBuilder->SetCurrentDebugLocation(0, 0, curScope, mCurMethodState->mCurScope->mDIInlinedAt); + } + else + { + // Set to whatever it previously was but at column zero, which we will know to be illegal + mBfIRBuilder->SetCurrentDebugLocation(mCurFilePosition.mCurLine + 1, 0, curScope, mCurMethodState->mCurScope->mDIInlinedAt); + } } if ((flags & BfSrcPosFlag_Expression) == 0)