While looking at https://gitlab.com/freepascal.org/fpc/source/-/merge_requests/448#note_1540865966

DW_AT_declaration came up.

From the DWARF 5 spec
A debugging information entry that represents a non-defining or otherwise 11 incomplete declaration of a program entity has a DW_AT_declaration attribute, 12 which is a flag.

From further reading through the spec it seems to refer to
  "the name being declared but not defined"
- the actual definition of the type is not included here (may be in a diff scope/unit)
- the implementation of the procedure is not included


Then I found it in debug info generated by FPC:


  TScreen = class(TLCLComponent)
  private const
    crScreen = Low(TCursor); // use with Screen.BeginTempCursor/EndTempCursor to add Screen.Cursor into the temp list


 <0><e3376>: Abbrev Number: 1 (DW_TAG_compile_unit)
    <e3377>   DW_AT_name        : forms.pp
    <e3380>   DW_AT_producer    : Free Pascal 3.2.3 2023/06/21
    <e339d>   DW_AT_comp_dir    : B:/lazarus_main/lcl/
...
...
 <1><103e29>: Abbrev Number: 20 (DW_TAG_class_type)
    <103e2a>   DW_AT_name        : TScreen
    <103e32>   DW_AT_byte_size   : 376
...
 <2><103e3d>: Abbrev Number: 68 (DW_TAG_member)
    <103e3e>   DW_AT_name        : crScreen
    <103e47>   DW_AT_declaration : 1
    <103e48>   DW_AT_external    : 1
    <103e49>   DW_AT_type        : <0x115cf7>
    <103e4d>   DW_AT_const_value : -32768


But this isn't an "incomplete declaration".

Everything is in place? Why is the tag added?
_______________________________________________
fpc-devel maillist  -  fpc-devel@lists.freepascal.org
https://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-devel

Reply via email to