We have a case where a source breakpoint isn't hit because the source line maps to 2 addresses in the debug info and lldb only sets 1 BP on the first address which is in a basic block that is rarely executed. The codegen looks something like this (in pseudo code):
some_code br lbl2 lbl1: some_more_code code_for_line_50_pt1 ; lldb sets BP here but code not executed lbl2: code_for_line_48 code_for_line_50_pt2 ; this code is executed if (cond) br lbl1 BreakpointResolverFileLine::SearchCallback correctly finds both symbol contexts for the line. The symbol contexts have different addresses but the same lldb_private::Block. As a result, BreakpointResolver::SetSCMatchesByLine thinks they are in the same "contiguous range" and removes the 2nd symbol context. lldb sets the breakpoint at the 1st address and the user never hits their breakpoint. The check for a "contiguous range" in BreakpointResolver::SetSCMatchesByLine seems wrong. Is it assuming a Block is actually a basic block (i.e. with no branches)? What's supposed to happen here? Thanks, -Dawn _______________________________________________ lldb-dev mailing list lldb-dev@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-dev