https://issues.dlang.org/show_bug.cgi?id=15432
--- Comment #4 from Rainer Schuetze <r.sagita...@gmx.de> --- Here's a further reduction: /////////////////// void call15432(string col) {} int test15432() // line 8 { call15432(null); return 0; } /////////////////// dumpbin: _D7testpdb9test15432FZi: 0000000000000000: 55 push rbp 0000000000000001: 48 8B EC mov rbp,rsp 0000000000000004: 48 83 EC 10 sub rsp,10h 0000000000000008: 48 C7 45 F0 00 00 mov qword ptr [rbp-10h],0 00 00 0000000000000010: 48 C7 45 F8 00 00 mov qword ptr [rbp-8],0 00 00 0000000000000018: 48 8D 4D F0 lea rcx,[rbp-10h] 000000000000001C: 48 83 EC 20 sub rsp,20h 0000000000000020: E8 00 00 00 00 call _D7testpdb9call15432FAyaZv 0000000000000025: 48 83 C4 20 add rsp,20h 0000000000000029: 31 C0 xor eax,eax 000000000000002B: 48 8B E5 mov rsp,rbp 000000000000002E: 5D pop rbp 000000000000002F: C3 ret cvdump (https://github.com/Microsoft/microsoft-pdb/blob/master/cvdump/cvdump.exe): *** LINES 8 00000000 10 00000008 11 00000029 12 0000002A You could get the offset to the line number before a stack address, but the return adress is still in the preceding line because there is some cleanup code after the call. In this code, the bad adress is even after the line with "return". Enumerating the line number info is possible in test/runnable/testpdb.d, but a test will have to check specific code to be generated. At least, I don't have an idea what to test for instead. --