Skip to content

Commit

Permalink
Fix crash when disabling debug info
Browse files Browse the repository at this point in the history
The source line debug info generation assumed that the function would
have debug info. Check for a non-null di_subprogram_ to ensure we are
emitting debug info for the function.

Rather than checking the di_builder_ - this way if we implement
`nodebug` function attributes, it'll fall out naturally (by creating a
null di_subprogram_) rather than having to come back and change this
from "is debug info enabled" to "is debug info enabled for this
function" later on.
  • Loading branch information
dwblaikie committed Aug 26, 2024
1 parent 0ae2a39 commit 5aadc0c
Show file tree
Hide file tree
Showing 2 changed files with 17 additions and 5 deletions.
14 changes: 9 additions & 5 deletions toolchain/lower/function_context.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -97,10 +97,12 @@ auto FunctionContext::LowerInst(SemIR::InstId inst_id) -> void {
auto inst = sem_ir().insts().Get(inst_id);
CARBON_VLOG() << "Lowering " << inst_id << ": " << inst << "\n";
builder_.getInserter().SetCurrentInstId(inst_id);
auto loc = file_context_->GetDiagnosticLoc(inst_id);
builder_.SetCurrentDebugLocation(
llvm::DILocation::get(builder_.getContext(), loc.line_number,
loc.column_number, di_subprogram_));
if (di_subprogram_) {
auto loc = file_context_->GetDiagnosticLoc(inst_id);
builder_.SetCurrentDebugLocation(
llvm::DILocation::get(builder_.getContext(), loc.line_number,
loc.column_number, di_subprogram_));
}

CARBON_KIND_SWITCH(inst) {
#define CARBON_SEM_IR_INST_KIND(Name) \
Expand All @@ -112,7 +114,9 @@ auto FunctionContext::LowerInst(SemIR::InstId inst_id) -> void {
}

builder_.getInserter().SetCurrentInstId(SemIR::InstId::Invalid);
builder_.SetCurrentDebugLocation(llvm::DebugLoc());
if (di_subprogram_) {
builder_.SetCurrentDebugLocation(llvm::DebugLoc());
}
}

auto FunctionContext::GetBlockArg(SemIR::InstBlockId block_id,
Expand Down
8 changes: 8 additions & 0 deletions toolchain/lower/testdata/debug/nodebug.carbon
Original file line number Diff line number Diff line change
Expand Up @@ -10,5 +10,13 @@
// TIP: To dump output, run:
// TIP: bazel run //toolchain/testing:file_test -- --dump_output --file_tests=toolchain/lower/testdata/debug/nodebug.carbon

fn F() {
}

// CHECK:STDOUT: ; ModuleID = 'nodebug.carbon'
// CHECK:STDOUT: source_filename = "nodebug.carbon"
// CHECK:STDOUT:
// CHECK:STDOUT: define void @F() {
// CHECK:STDOUT: entry:
// CHECK:STDOUT: ret void
// CHECK:STDOUT: }

0 comments on commit 5aadc0c

Please sign in to comment.