backend: dwarfdbginf: DW_TAG_subprogram should have DW_AT_decl_column

Fix issue #22423.

Signed-off-by: Luís Ferreira <contact@lsferreira.net>
This commit is contained in:
Luís Ferreira 2021-10-18 22:24:51 +01:00 committed by The Dlang Bot
parent 0befa1bc6a
commit 73c87a8acd
4 changed files with 23 additions and 2 deletions

View file

@ -180,7 +180,7 @@ struct Srcpos
{ {
nothrow: nothrow:
uint Slinnum; // 0 means no info available uint Slinnum; // 0 means no info available
uint Scharnum; uint Scharnum; // 0 means no info available
version (SCPP) version (SCPP)
{ {
Sfile **Sfilptr; // file Sfile **Sfilptr; // file
@ -203,7 +203,7 @@ nothrow:
const(char*) name() const { return Sfilename; } const(char*) name() const { return Sfilename; }
static Srcpos create(const(char)* filename, uint linnum, int charnum) static Srcpos create(const(char)* filename, uint linnum, uint charnum)
{ {
// Cannot have constructor because Srcpos is used in a union // Cannot have constructor because Srcpos is used in a union
Srcpos sp; Srcpos sp;

View file

@ -1882,6 +1882,7 @@ static if (1)
abuf.writeByte(DW_AT_decl_file); abuf.writeByte(DW_FORM_data1); abuf.writeByte(DW_AT_decl_file); abuf.writeByte(DW_FORM_data1);
abuf.writeByte(DW_AT_decl_line); abuf.writeByte(DW_FORM_data2); abuf.writeByte(DW_AT_decl_line); abuf.writeByte(DW_FORM_data2);
abuf.writeByte(DW_AT_decl_column); abuf.writeByte(DW_FORM_data2);
if (ret_type) if (ret_type)
{ {
abuf.writeByte(DW_AT_type); abuf.writeByte(DW_FORM_ref4); abuf.writeByte(DW_AT_type); abuf.writeByte(DW_FORM_ref4);
@ -1923,6 +1924,7 @@ static if (1)
debug_info.buf.writeString(sfunc.Sident.ptr); // DW_AT_MIPS_linkage_name debug_info.buf.writeString(sfunc.Sident.ptr); // DW_AT_MIPS_linkage_name
debug_info.buf.writeByte(filenum); // DW_AT_decl_file debug_info.buf.writeByte(filenum); // DW_AT_decl_file
debug_info.buf.write16(sfunc.Sfunc.Fstartline.Slinnum); // DW_AT_decl_line debug_info.buf.write16(sfunc.Sfunc.Fstartline.Slinnum); // DW_AT_decl_line
debug_info.buf.write16(sfunc.Sfunc.Fstartline.Scharnum); // DW_AT_decl_column
if (ret_type) if (ret_type)
debug_info.buf.write32(ret_type); // DW_AT_type debug_info.buf.write32(ret_type); // DW_AT_type

View file

@ -0,0 +1,8 @@
DW_AT_name : issue22423
DW_AT_name : issue22423.issue22423func
DW_AT_decl_line : 1000
DW_AT_decl_column : 10
DW_AT_decl_line : 2000
DW_AT_decl_column : 20
D main
issue22423._d_cmain!().main

View file

@ -0,0 +1,11 @@
#line 1000
void main() // col: 10
{
}
#line 2000
void issue22423func() pure // col: 20
{
}