Question about debugging dwarf generated by LLVM

Say I have the following program and dwarf line number table.

Program:

kernel void nbt03( global uint *ip )

{

size_t groupSize = get_local_size(0);

for (int i=0; i < 256; ++i) {

*ip += groupSize;

}

}

Line Number Statements:

Extended opcode 2: set Address to 0x38

Special opcode 6: advance Address by 0 to 0x38 and Line by 1 to 2

Set column to 40

Extended opcode 2: set Address to 0x3e

Special opcode 6: advance Address by 0 to 0x3e and Line by 1 to 3

Set column to 16

Extended opcode 2: set Address to 0x4c

Special opcode 7: advance Address by 0 to 0x4c and Line by 2 to 5

Set column to 25

Extended opcode 2: set Address to 0x54

Special opcode 6: advance Address by 0 to 0x54 and Line by 1 to 6

Set column to 30

Extended opcode 2: set Address to 0x60

Special opcode 4: advance Address by 0 to 0x60 and Line by -1 to 5

Set column to 1

Extended opcode 2: set Address to 0x67

Special opcode 8: advance Address by 0 to 0x67 and Line by 3 to 8

Extended opcode 2: set Address to 0x8e

Advance PC by 0 to 8e

Extended opcode 1: End of Sequence

Address 0x60(italics) refers to the ++i in the for loop, if the beginning of the for loop jumps to a location,say 0x44, that is between 0x3e and 0x4c(bolded numbers), what line number should the debugger display on the screen?

There is really three options

  1. Should the debugger use line 3 as it was the line number specified before the target address?

  2. Should the debugger use line 5 as it is the line number specified after the target address?

  3. The debugger should use the current line number because no line number commands exist for address 0x44?

As I am by no means an expert on debugging, I need advice from more experience developers. Also if it is possible to point me to any spec/documentation that might be useful to cite in the future for resolving this types of issues, it would be greatly appreciated.

Thanks,

Micah