https://github.com/JDevlieghere updated https://github.com/llvm/llvm-project/pull/106740
>From f7b0874d6bd83c85f4fb6411fc4da7dfb4dd8453 Mon Sep 17 00:00:00 2001 From: Jonas Devlieghere <jo...@devlieghere.com> Date: Fri, 30 Aug 2024 07:20:26 -0700 Subject: [PATCH 1/3] [lldb] Deal with SupportFiles in SourceManager (NFC) To support detecting MD5 checksum mismatches, deal with SupportFiles rather than a plain FileSpecs in the SourceManager. --- lldb/include/lldb/Core/SourceManager.h | 36 ++++---- lldb/source/API/SBSourceManager.cpp | 10 +-- .../BreakpointResolverFileRegex.cpp | 3 +- .../Commands/CommandObjectBreakpoint.cpp | 16 ++-- lldb/source/Commands/CommandObjectSource.cpp | 26 +++--- lldb/source/Core/Disassembler.cpp | 3 +- lldb/source/Core/IOHandlerCursesGUI.cpp | 4 +- lldb/source/Core/SourceManager.cpp | 84 +++++++++---------- lldb/source/Expression/REPL.cpp | 15 ++-- lldb/source/Target/StackFrame.cpp | 2 +- lldb/source/Target/StackFrameList.cpp | 2 +- 11 files changed, 107 insertions(+), 94 deletions(-) diff --git a/lldb/include/lldb/Core/SourceManager.h b/lldb/include/lldb/Core/SourceManager.h index 8feeb4347dd52e..b1c9b3d054ef9f 100644 --- a/lldb/include/lldb/Core/SourceManager.h +++ b/lldb/include/lldb/Core/SourceManager.h @@ -141,14 +141,13 @@ class SourceManager { ~SourceManager(); - FileSP GetLastFile() { return GetFile(m_last_file_spec); } + FileSP GetLastFile() { return GetFile(m_last_support_file_sp); } - size_t - DisplaySourceLinesWithLineNumbers(const FileSpec &file, uint32_t line, - uint32_t column, uint32_t context_before, - uint32_t context_after, - const char *current_line_cstr, Stream *s, - const SymbolContextList *bp_locs = nullptr); + size_t DisplaySourceLinesWithLineNumbers( + lldb::SupportFileSP support_file_sp, uint32_t line, uint32_t column, + uint32_t context_before, uint32_t context_after, + const char *current_line_cstr, Stream *s, + const SymbolContextList *bp_locs = nullptr); // This variant uses the last file we visited. size_t DisplaySourceLinesWithLineNumbersUsingLastFile( @@ -159,22 +158,31 @@ class SourceManager { size_t DisplayMoreWithLineNumbers(Stream *s, uint32_t count, bool reverse, const SymbolContextList *bp_locs = nullptr); - bool SetDefaultFileAndLine(const FileSpec &file_spec, uint32_t line); + bool SetDefaultFileAndLine(lldb::SupportFileSP support_file_sp, + uint32_t line); + + struct SupportFileAndLine { + lldb::SupportFileSP support_file_sp; + uint32_t line; + SupportFileAndLine(lldb::SupportFileSP support_file_sp, uint32_t line) + : support_file_sp(support_file_sp), line(line){}; + }; - bool GetDefaultFileAndLine(FileSpec &file_spec, uint32_t &line); + std::optional<SupportFileAndLine> GetDefaultFileAndLine(); bool DefaultFileAndLineSet() { - return (GetFile(m_last_file_spec).get() != nullptr); + return (GetFile(m_last_support_file_sp).get() != nullptr); } - void FindLinesMatchingRegex(FileSpec &file_spec, RegularExpression ®ex, - uint32_t start_line, uint32_t end_line, + void FindLinesMatchingRegex(lldb::SupportFileSP support_file_sp, + RegularExpression ®ex, uint32_t start_line, + uint32_t end_line, std::vector<uint32_t> &match_lines); - FileSP GetFile(const FileSpec &file_spec); + FileSP GetFile(lldb::SupportFileSP support_file_sp); protected: - FileSpec m_last_file_spec; + lldb::SupportFileSP m_last_support_file_sp; uint32_t m_last_line; uint32_t m_last_count; bool m_default_set; diff --git a/lldb/source/API/SBSourceManager.cpp b/lldb/source/API/SBSourceManager.cpp index e46f990698d826..4b96f1222bc88f 100644 --- a/lldb/source/API/SBSourceManager.cpp +++ b/lldb/source/API/SBSourceManager.cpp @@ -46,15 +46,15 @@ class SourceManagerImpl { lldb::TargetSP target_sp(m_target_wp.lock()); if (target_sp) { return target_sp->GetSourceManager().DisplaySourceLinesWithLineNumbers( - file, line, column, context_before, context_after, current_line_cstr, - s); + std::make_shared<SupportFile>(file), line, column, context_before, + context_after, current_line_cstr, s); } else { lldb::DebuggerSP debugger_sp(m_debugger_wp.lock()); if (debugger_sp) { return debugger_sp->GetSourceManager() - .DisplaySourceLinesWithLineNumbers(file, line, column, - context_before, context_after, - current_line_cstr, s); + .DisplaySourceLinesWithLineNumbers( + std::make_shared<SupportFile>(file), line, column, + context_before, context_after, current_line_cstr, s); } } return 0; diff --git a/lldb/source/Breakpoint/BreakpointResolverFileRegex.cpp b/lldb/source/Breakpoint/BreakpointResolverFileRegex.cpp index 0509924e6300be..05fa7b93096889 100644 --- a/lldb/source/Breakpoint/BreakpointResolverFileRegex.cpp +++ b/lldb/source/Breakpoint/BreakpointResolverFileRegex.cpp @@ -102,7 +102,8 @@ Searcher::CallbackReturn BreakpointResolverFileRegex::SearchCallback( FileSpec cu_file_spec = cu->GetPrimaryFile(); std::vector<uint32_t> line_matches; context.target_sp->GetSourceManager().FindLinesMatchingRegex( - cu_file_spec, m_regex, 1, UINT32_MAX, line_matches); + std::make_shared<SupportFile>(cu_file_spec), m_regex, 1, UINT32_MAX, + line_matches); uint32_t num_matches = line_matches.size(); for (uint32_t i = 0; i < num_matches; i++) { diff --git a/lldb/source/Commands/CommandObjectBreakpoint.cpp b/lldb/source/Commands/CommandObjectBreakpoint.cpp index abde27b2b53ad8..1399867feae1b8 100644 --- a/lldb/source/Commands/CommandObjectBreakpoint.cpp +++ b/lldb/source/Commands/CommandObjectBreakpoint.cpp @@ -769,20 +769,26 @@ class CommandObjectBreakpointSet : public CommandObjectParsed { private: bool GetDefaultFile(Target &target, FileSpec &file, CommandReturnObject &result) { - uint32_t default_line; // First use the Source Manager's default file. Then use the current stack // frame's file. - if (!target.GetSourceManager().GetDefaultFileAndLine(file, default_line)) { + auto file_and_line = target.GetSourceManager().GetDefaultFileAndLine(); + if (file_and_line) { + file = file_and_line->support_file_sp->GetSpecOnly(); + return true; + } + StackFrame *cur_frame = m_exe_ctx.GetFramePtr(); if (cur_frame == nullptr) { result.AppendError( "No selected frame to use to find the default file."); return false; - } else if (!cur_frame->HasDebugInformation()) { + } + if (!cur_frame->HasDebugInformation()) { result.AppendError("Cannot use the selected frame to find the default " "file, it has no debug info."); return false; - } else { + } + const SymbolContext &sc = cur_frame->GetSymbolContext(eSymbolContextLineEntry); if (sc.line_entry.GetFile()) { @@ -791,8 +797,6 @@ class CommandObjectBreakpointSet : public CommandObjectParsed { result.AppendError("Can't find the file for the selected frame to " "use as the default file."); return false; - } - } } return true; } diff --git a/lldb/source/Commands/CommandObjectSource.cpp b/lldb/source/Commands/CommandObjectSource.cpp index 1a0629c6765d41..1fc122420388d8 100644 --- a/lldb/source/Commands/CommandObjectSource.cpp +++ b/lldb/source/Commands/CommandObjectSource.cpp @@ -777,14 +777,16 @@ class CommandObjectSourceList : public CommandObjectParsed { if (sc.function) { Target &target = GetTarget(); - FileSpec start_file; + SupportFileSP start_file = std::make_shared<SupportFile>(); uint32_t start_line; uint32_t end_line; FileSpec end_file; if (sc.block == nullptr) { // Not an inlined function - sc.function->GetStartLineSourceInfo(start_file, start_line); + FileSpec function_file_spec; + sc.function->GetStartLineSourceInfo(function_file_spec, start_line); + start_file = std::make_shared<SupportFile>(function_file_spec); if (start_line == 0) { result.AppendErrorWithFormat("Could not find line information for " "start of function: \"%s\".\n", @@ -794,7 +796,7 @@ class CommandObjectSourceList : public CommandObjectParsed { sc.function->GetEndLineSourceInfo(end_file, end_line); } else { // We have an inlined function - start_file = source_info.line_entry.GetFile(); + start_file = source_info.line_entry.file_sp; start_line = source_info.line_entry.line; end_line = start_line + m_options.num_lines; } @@ -825,14 +827,15 @@ class CommandObjectSourceList : public CommandObjectParsed { if (m_options.show_bp_locs) { const bool show_inlines = true; - m_breakpoint_locations.Reset(start_file, 0, show_inlines); + m_breakpoint_locations.Reset(start_file->GetSpecOnly(), 0, + show_inlines); SearchFilterForUnconstrainedSearches target_search_filter( m_exe_ctx.GetTargetSP()); target_search_filter.Search(m_breakpoint_locations); } - result.AppendMessageWithFormat("File: %s\n", - start_file.GetPath().c_str()); + result.AppendMessageWithFormat( + "File: %s\n", start_file->GetSpecOnly().GetPath().c_str()); // We don't care about the column here. const uint32_t column = 0; return target.GetSourceManager().DisplaySourceLinesWithLineNumbers( @@ -1050,8 +1053,9 @@ class CommandObjectSourceList : public CommandObjectParsed { ? sc.line_entry.column : 0; target.GetSourceManager().DisplaySourceLinesWithLineNumbers( - sc.comp_unit->GetPrimaryFile(), sc.line_entry.line, column, - lines_to_back_up, m_options.num_lines - lines_to_back_up, "->", + std::make_shared<SupportFile>(sc.comp_unit->GetPrimaryFile()), + sc.line_entry.line, column, lines_to_back_up, + m_options.num_lines - lines_to_back_up, "->", &result.GetOutputStream(), GetBreakpointLocations()); result.SetStatus(eReturnStatusSuccessFinishResult); } @@ -1170,9 +1174,9 @@ class CommandObjectSourceList : public CommandObjectParsed { m_options.num_lines = 10; const uint32_t column = 0; target.GetSourceManager().DisplaySourceLinesWithLineNumbers( - sc.comp_unit->GetPrimaryFile(), m_options.start_line, column, 0, - m_options.num_lines, "", &result.GetOutputStream(), - GetBreakpointLocations()); + std::make_shared<SupportFile>(sc.comp_unit->GetPrimaryFile()), + m_options.start_line, column, 0, m_options.num_lines, "", + &result.GetOutputStream(), GetBreakpointLocations()); result.SetStatus(eReturnStatusSuccessFinishResult); } else { diff --git a/lldb/source/Core/Disassembler.cpp b/lldb/source/Core/Disassembler.cpp index 9286f62058bc8d..d071e3bfe4f77d 100644 --- a/lldb/source/Core/Disassembler.cpp +++ b/lldb/source/Core/Disassembler.cpp @@ -517,7 +517,8 @@ void Disassembler::PrintInstructions(Debugger &debugger, const ArchSpec &arch, line_highlight = "**"; } source_manager.DisplaySourceLinesWithLineNumbers( - ln.file, ln.line, ln.column, 0, 0, line_highlight, &strm); + std::make_shared<SupportFile>(ln.file), ln.line, ln.column, 0, 0, + line_highlight, &strm); } if (source_lines_to_display.print_source_context_end_eol) strm.EOL(); diff --git a/lldb/source/Core/IOHandlerCursesGUI.cpp b/lldb/source/Core/IOHandlerCursesGUI.cpp index 8f44e3d0cd016b..3d69aedb6b13ee 100644 --- a/lldb/source/Core/IOHandlerCursesGUI.cpp +++ b/lldb/source/Core/IOHandlerCursesGUI.cpp @@ -6910,8 +6910,8 @@ class SourceFileWindowDelegate : public WindowDelegate { } else { // File changed, set selected line to the line with the PC m_selected_line = m_pc_line; - m_file_sp = m_debugger.GetSourceManager().GetFile( - m_sc.line_entry.GetFile()); + m_file_sp = + m_debugger.GetSourceManager().GetFile(m_sc.line_entry.file_sp); if (m_file_sp) { const size_t num_lines = m_file_sp->GetNumLines(); m_line_width = 1; diff --git a/lldb/source/Core/SourceManager.cpp b/lldb/source/Core/SourceManager.cpp index cd0011a25f1c39..c427bb91f4643a 100644 --- a/lldb/source/Core/SourceManager.cpp +++ b/lldb/source/Core/SourceManager.cpp @@ -63,18 +63,22 @@ static void resolve_tilde(FileSpec &file_spec) { // SourceManager constructor SourceManager::SourceManager(const TargetSP &target_sp) - : m_last_line(0), m_last_count(0), m_default_set(false), - m_target_wp(target_sp), + : m_last_support_file_sp(std::make_shared<SupportFile>()), m_last_line(0), + m_last_count(0), m_default_set(false), m_target_wp(target_sp), m_debugger_wp(target_sp->GetDebugger().shared_from_this()) {} SourceManager::SourceManager(const DebuggerSP &debugger_sp) - : m_last_line(0), m_last_count(0), m_default_set(false), m_target_wp(), + : m_last_support_file_sp(std::make_shared<SupportFile>()), m_last_line(0), + m_last_count(0), m_default_set(false), m_target_wp(), m_debugger_wp(debugger_sp) {} // Destructor SourceManager::~SourceManager() = default; -SourceManager::FileSP SourceManager::GetFile(const FileSpec &file_spec) { +SourceManager::FileSP SourceManager::GetFile(SupportFileSP support_file_sp) { + assert(support_file_sp && "SupportFileSP must be valid"); + + FileSpec file_spec = support_file_sp->GetSpecOnly(); if (!file_spec) return {}; @@ -87,10 +91,8 @@ SourceManager::FileSP SourceManager::GetFile(const FileSpec &file_spec) { LLDB_LOG(log, "Source file caching disabled: creating new source file: {0}", file_spec); if (target_sp) - return std::make_shared<File>(std::make_shared<SupportFile>(file_spec), - target_sp); - return std::make_shared<File>(std::make_shared<SupportFile>(file_spec), - debugger_sp); + return std::make_shared<File>(support_file_sp, target_sp); + return std::make_shared<File>(support_file_sp, debugger_sp); } ProcessSP process_sp = target_sp ? target_sp->GetProcessSP() : ProcessSP(); @@ -151,11 +153,9 @@ SourceManager::FileSP SourceManager::GetFile(const FileSpec &file_spec) { // (Re)create the file. if (target_sp) - file_sp = std::make_shared<File>(std::make_shared<SupportFile>(file_spec), - target_sp); + file_sp = std::make_shared<File>(support_file_sp, target_sp); else - file_sp = std::make_shared<File>(std::make_shared<SupportFile>(file_spec), - debugger_sp); + file_sp = std::make_shared<File>(support_file_sp, debugger_sp); // Add the file to the debugger and process cache. If the file was // invalidated, this will overwrite it. @@ -235,11 +235,8 @@ size_t SourceManager::DisplaySourceLinesWithLineNumbersUsingLastFile( start_line = 1; } - if (!m_default_set) { - FileSpec tmp_spec; - uint32_t tmp_line; - GetDefaultFileAndLine(tmp_spec, tmp_line); - } + if (!m_default_set) + GetDefaultFileAndLine(); m_last_line = start_line; m_last_count = count; @@ -310,11 +307,12 @@ size_t SourceManager::DisplaySourceLinesWithLineNumbersUsingLastFile( } size_t SourceManager::DisplaySourceLinesWithLineNumbers( - const FileSpec &file_spec, uint32_t line, uint32_t column, + lldb::SupportFileSP support_file_sp, uint32_t line, uint32_t column, uint32_t context_before, uint32_t context_after, const char *current_line_cstr, Stream *s, const SymbolContextList *bp_locs) { - FileSP file_sp(GetFile(file_spec)); + assert(support_file_sp && "SupportFile must be valid"); + FileSP file_sp(GetFile(support_file_sp)); uint32_t start_line; uint32_t count = context_before + context_after + 1; @@ -327,8 +325,9 @@ size_t SourceManager::DisplaySourceLinesWithLineNumbers( if (last_file_sp.get() != file_sp.get()) { if (line == 0) m_last_line = 0; - m_last_file_spec = file_spec; + m_last_support_file_sp = support_file_sp; } + return DisplaySourceLinesWithLineNumbersUsingLastFile( start_line, count, line, column, current_line_cstr, s, bp_locs); } @@ -339,11 +338,8 @@ size_t SourceManager::DisplayMoreWithLineNumbers( // to figure it out here. FileSP last_file_sp(GetLastFile()); const bool have_default_file_line = last_file_sp && m_last_line > 0; - if (!m_default_set) { - FileSpec tmp_spec; - uint32_t tmp_line; - GetDefaultFileAndLine(tmp_spec, tmp_line); - } + if (!m_default_set) + GetDefaultFileAndLine(); if (last_file_sp) { if (m_last_line == UINT32_MAX) @@ -378,26 +374,27 @@ size_t SourceManager::DisplayMoreWithLineNumbers( return 0; } -bool SourceManager::SetDefaultFileAndLine(const FileSpec &file_spec, +bool SourceManager::SetDefaultFileAndLine(lldb::SupportFileSP support_file_sp, uint32_t line) { + assert(support_file_sp && "SupportFile must be valid"); + m_default_set = true; - FileSP file_sp(GetFile(file_spec)); - if (file_sp) { + if (FileSP file_sp = GetFile(support_file_sp)) { m_last_line = line; - m_last_file_spec = file_spec; + m_last_support_file_sp = support_file_sp; return true; - } else { - return false; } + + return false; } -bool SourceManager::GetDefaultFileAndLine(FileSpec &file_spec, uint32_t &line) { - if (FileSP last_file_sp = GetLastFile()) { - file_spec = m_last_file_spec; - line = m_last_line; - return true; - } else if (!m_default_set) { +std::optional<SourceManager::SupportFileAndLine> +SourceManager::GetDefaultFileAndLine() { + if (FileSP last_file_sp = GetLastFile()) + return SupportFileAndLine(m_last_support_file_sp, m_last_line); + + if (!m_default_set) { TargetSP target_sp(m_target_wp.lock()); if (target_sp) { @@ -423,26 +420,25 @@ bool SourceManager::GetDefaultFileAndLine(FileSpec &file_spec, uint32_t &line) { if (sc.function->GetAddressRange() .GetBaseAddress() .CalculateSymbolContextLineEntry(line_entry)) { - SetDefaultFileAndLine(line_entry.GetFile(), line_entry.line); - file_spec = m_last_file_spec; - line = m_last_line; - return true; + SetDefaultFileAndLine(line_entry.file_sp, line_entry.line); + return SupportFileAndLine(line_entry.file_sp, m_last_line); } } } } } } - return false; + + return std::nullopt; } -void SourceManager::FindLinesMatchingRegex(FileSpec &file_spec, +void SourceManager::FindLinesMatchingRegex(SupportFileSP support_file_sp, RegularExpression ®ex, uint32_t start_line, uint32_t end_line, std::vector<uint32_t> &match_lines) { match_lines.clear(); - FileSP file_sp = GetFile(file_spec); + FileSP file_sp = GetFile(support_file_sp); if (!file_sp) return; return file_sp->FindLinesMatchingRegex(regex, start_line, end_line, diff --git a/lldb/source/Expression/REPL.cpp b/lldb/source/Expression/REPL.cpp index a6a4ffb5e0af9e..56c50e346b39b8 100644 --- a/lldb/source/Expression/REPL.cpp +++ b/lldb/source/Expression/REPL.cpp @@ -473,7 +473,8 @@ void REPL::IOHandlerInputComplete(IOHandler &io_handler, std::string &code) { // Now set the default file and line to the REPL source file m_target.GetSourceManager().SetDefaultFileAndLine( - FileSpec(m_repl_source_path), new_default_line); + std::make_shared<SupportFile>(FileSpec(m_repl_source_path)), + new_default_line); } static_cast<IOHandlerEditline &>(io_handler) .SetBaseLineNumber(m_code.GetSize() + 1); @@ -570,13 +571,11 @@ Status REPL::RunLoop() { lldb::IOHandlerSP io_handler_sp(GetIOHandler()); - FileSpec save_default_file; - uint32_t save_default_line = 0; + std::optional<SourceManager::SupportFileAndLine> default_file_line; if (!m_repl_source_path.empty()) { // Save the current default file and line - m_target.GetSourceManager().GetDefaultFileAndLine(save_default_file, - save_default_line); + default_file_line = m_target.GetSourceManager().GetDefaultFileAndLine(); } debugger.RunIOHandlerAsync(io_handler_sp); @@ -615,8 +614,8 @@ Status REPL::RunLoop() { } // Restore the default file and line - if (save_default_file && save_default_line != 0) - m_target.GetSourceManager().SetDefaultFileAndLine(save_default_file, - save_default_line); + if (default_file_line) + m_target.GetSourceManager().SetDefaultFileAndLine( + default_file_line->support_file_sp, default_file_line->line); return error; } diff --git a/lldb/source/Target/StackFrame.cpp b/lldb/source/Target/StackFrame.cpp index 5d90ed90b3d3fd..e35a4c318d358f 100644 --- a/lldb/source/Target/StackFrame.cpp +++ b/lldb/source/Target/StackFrame.cpp @@ -1923,7 +1923,7 @@ bool StackFrame::GetStatus(Stream &strm, bool show_frame_info, bool show_source, size_t num_lines = target->GetSourceManager().DisplaySourceLinesWithLineNumbers( - m_sc.line_entry.GetFile(), start_line, m_sc.line_entry.column, + m_sc.line_entry.file_sp, start_line, m_sc.line_entry.column, source_lines_before, source_lines_after, "->", &strm); if (num_lines != 0) have_source = true; diff --git a/lldb/source/Target/StackFrameList.cpp b/lldb/source/Target/StackFrameList.cpp index 7808bd3674ab19..3849ec5ed178d9 100644 --- a/lldb/source/Target/StackFrameList.cpp +++ b/lldb/source/Target/StackFrameList.cpp @@ -886,7 +886,7 @@ void StackFrameList::SetDefaultFileAndLineToSelectedFrame() { SymbolContext sc = frame_sp->GetSymbolContext(eSymbolContextLineEntry); if (sc.line_entry.GetFile()) m_thread.CalculateTarget()->GetSourceManager().SetDefaultFileAndLine( - sc.line_entry.GetFile(), sc.line_entry.line); + sc.line_entry.file_sp, sc.line_entry.line); } } } >From 99d652fde0ce92cce141ab0d9a6005a784d61746 Mon Sep 17 00:00:00 2001 From: Jonas Devlieghere <jo...@devlieghere.com> Date: Fri, 30 Aug 2024 08:05:25 -0700 Subject: [PATCH 2/3] Fix formatting missed by my local clang-format --- lldb/include/lldb/Core/SourceManager.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lldb/include/lldb/Core/SourceManager.h b/lldb/include/lldb/Core/SourceManager.h index b1c9b3d054ef9f..a9958ab1a369c6 100644 --- a/lldb/include/lldb/Core/SourceManager.h +++ b/lldb/include/lldb/Core/SourceManager.h @@ -165,7 +165,7 @@ class SourceManager { lldb::SupportFileSP support_file_sp; uint32_t line; SupportFileAndLine(lldb::SupportFileSP support_file_sp, uint32_t line) - : support_file_sp(support_file_sp), line(line){}; + : support_file_sp(support_file_sp), line(line) {}; }; std::optional<SupportFileAndLine> GetDefaultFileAndLine(); >From e3df9346868b7d46cb9f36bd42cf3cf3e9e39dd5 Mon Sep 17 00:00:00 2001 From: Jonas Devlieghere <jo...@devlieghere.com> Date: Fri, 30 Aug 2024 10:53:27 -0700 Subject: [PATCH 3/3] Address Alex' comments --- lldb/include/lldb/Core/SourceManager.h | 2 +- lldb/source/Commands/CommandObjectBreakpoint.cpp | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/lldb/include/lldb/Core/SourceManager.h b/lldb/include/lldb/Core/SourceManager.h index a9958ab1a369c6..ae7bd3d2311f96 100644 --- a/lldb/include/lldb/Core/SourceManager.h +++ b/lldb/include/lldb/Core/SourceManager.h @@ -165,7 +165,7 @@ class SourceManager { lldb::SupportFileSP support_file_sp; uint32_t line; SupportFileAndLine(lldb::SupportFileSP support_file_sp, uint32_t line) - : support_file_sp(support_file_sp), line(line) {}; + : support_file_sp(support_file_sp), line(line) {} }; std::optional<SupportFileAndLine> GetDefaultFileAndLine(); diff --git a/lldb/source/Commands/CommandObjectBreakpoint.cpp b/lldb/source/Commands/CommandObjectBreakpoint.cpp index 1399867feae1b8..ede3dd2f2a864c 100644 --- a/lldb/source/Commands/CommandObjectBreakpoint.cpp +++ b/lldb/source/Commands/CommandObjectBreakpoint.cpp @@ -771,9 +771,9 @@ class CommandObjectBreakpointSet : public CommandObjectParsed { CommandReturnObject &result) { // First use the Source Manager's default file. Then use the current stack // frame's file. - auto file_and_line = target.GetSourceManager().GetDefaultFileAndLine(); - if (file_and_line) { - file = file_and_line->support_file_sp->GetSpecOnly(); + if (auto maybe_file_and_line = + target.GetSourceManager().GetDefaultFileAndLine()) { + file = maybe_file_and_line->support_file_sp->GetSpecOnly(); return true; } _______________________________________________ lldb-commits mailing list lldb-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits