<table border="1" cellspacing="0" cellpadding="8">
    <tr>
        <th>Issue</th>
        <td>
            <a href=https://github.com/llvm/llvm-project/issues/74097>74097</a>
        </td>
    </tr>

    <tr>
        <th>Summary</th>
        <td>
            Incorrect DW_AT_decl_file with -gdwarf-5
        </td>
    </tr>

    <tr>
      <th>Labels</th>
      <td>
            new issue
      </td>
    </tr>

    <tr>
      <th>Assignees</th>
      <td>
      </td>
    </tr>

    <tr>
      <th>Reporter</th>
      <td>
          myxoid
      </td>
    </tr>
</table>

<pre>
    The value zero for this attribute  "indicates that no source file has been specified". DWARF 4 and 5 standards have the same wording here. The typical use-case is for built-in types like `__va_list`.

Similar language exists for source line and column but I have not looked into them.

With `-gdwarf-5`, all versions of Clang I tested (13, 14, 15, 16), incorrectly populate and use file entry `0`.

This breaks the elfutils function `dwarf_decl_file` and anything that uses it.

```
$ cat qq.c
int x;
$ clang-16 -Wall -Wextra -g -c qq.c -o qq.o
$ readelf --debug-dump qq.o | grep -i2 file
 DW_AT_type         DW_FORM_ref4
    DW_AT_external DW_FORM_flag_present
    DW_AT_decl_file    DW_FORM_data1
 DW_AT_decl_line    DW_FORM_data1
    DW_AT_location DW_FORM_exprloc
--
    <20>   DW_AT_type        : <0x29>
    <24> DW_AT_external    : 1
    <24>   DW_AT_decl_file   : 0
    <25> DW_AT_decl_line   : 1
    <26>   DW_AT_location    :  (DW_OP_addrx <0>)
--
  0     (indirect line string, offset: 0): /tmp

 The File Name Table (offset 0x2e, lines 1, columns 3):
  Entry Dir     MD5 Name
  0     0 0xa7134f0f8621a0559890bc8e05fc206 (indirect line string, offset: 0x5): qq.c
$ clang-16 -v
Debian clang version 16.0.6 (11)
Target: x86_64-pc-linux-gnu
Thread model: posix
InstalledDir: /usr/bin
Found candidate GCC installation: /usr/bin/../lib/gcc/x86_64-linux-gnu/11
Found candidate GCC installation: /usr/bin/../lib/gcc/x86_64-linux-gnu/12
Found candidate GCC installation: /usr/bin/../lib/gcc/x86_64-linux-gnu/13
Selected GCC installation: /usr/bin/../lib/gcc/x86_64-linux-gnu/13
Candidate multilib: .;@m64
Candidate multilib: 32;@m32
Candidate multilib: x32;@mx32
Selected multilib: .;@m64
```
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJy0Vk2P2zYQ_TX0ZSCDoj5sH3xw1lGxhzRFuoCPAiWOZDY0qZCUV9tfX5CyvetNGvTQLBaSTL15fG_IGYo7J3uNuCXFB1LsF3z0R2O3p5fJSLFojHjZPh0RzlyNCH-jNdAZC_4oHXDvrWxGjwCEMamFbLlHB_7IPWgDzoy2ReikQjhyBw2iBjdgKzuJgjC2hP1h96WCHLgWUIDzXAtuhYMjPyP4I4LjJ4RnY4XUPRzR4hKCHP8yyJYrGB0mLXcI0kVdzSiVT6QOAHSg5FcEUtK6PvNaSedJSZeE7gndzdc_5UkqbkFx3Y-8R8BJOj9zXeQrqTHqa40aTxqa0cPjLFAbD8qYryhAam-C4NMd_UH6Y5g_6cUzt11SkJIS9gBcKTijddJoB6aDhzA_PIJH51EAYes0C7g0j9ciXkvCNuFB6tZYi61XLzCYYVTczwJHd0k2am9fwrz0vd-nsG6NRf7VxfSi6kYvlYNu1K2XRoeoqLUW2Ko60JGSRnquX_wxLENc39GhA-nv2IO7-X_-yXJouYdv35btPCK1h4lkH968D86TtITkEJKSHHDylkPSQ9LGQEhMuJvXEItcoOogSQQ2Y5-I8TRECJDVA_QWB0gki5mYg2B_qHdPddgScP3bH-rq85dPtcUuv6Dm0d1TjZNHq7m6gTrF-3qw6FD79-Bbmt6yCu55ejd5hMWt9C-wG6EyLY8rcUXhNFhlLhlMklc8yR4YJdnHW-hbhyTbBQCd2IZkH--D8hD0zuslJP0B8kdWA5beY4tX1rduf8BavmW9-b1gw-7fH-rPf9RcCDtFE8EB27zPAJ2NsnVoPaEg5lp13krdh0oxXefQz1JDGnZAWOVPw9s9G9tJFUz9HlrNE28UBs45FujEMFAFZgdpeJz7gINs5ryq-RiLbi9tVPVpX0TCe60U6MRXaZZ3tFuXLOW0KDbrDW3aNdKiaxkt_6Ofqbg4ei2u-3I6z4N7bCTX8_i15UBaLukyzpSmt7w-cdvP5NO6rMs8GdpEST1OSa_Ha_cItQcnI1AF4GCcnOZXj9p5rhSKvbSXRI_OElY1Us-IyoyhiXItpAgd67eH0MpiVFz_76JYtVwSVinZEFb1bUtYdVH2KotVafpr6dmvpc8u5xAqbEPr_595H26CT6PyMkRlO1iGFpzTU5n_DJWxCyxjP4NNN9x0Bd7c_GzS22GxENtMbLINX-A2XdE0z1ebLF8ctyjSFW3LlShKsS5X6w1d8XLNBWarQjRptpBbRlmWMpqmJSuyfNm2ZdownncixXZTdCSneOJSLZU6n5bG9gvp3IjbVU43q4XiDSoXP3wY0_gM8SVhLHwH2W2ISZqxdySn4dvBvbJ46RVuH68H8Xf98Tmc-7dDfzFatT16P7jQLlgVFk7649gsW3MKa6nO11syWPMXtp6wKopxhFVR7D8BAAD__3Ub6AE">