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

    <tr>
        <th>Summary</th>
        <td>
            Clang doesn't emit `DW_TAG_const_expr` for `constexpr` variables.
        </td>
    </tr>

    <tr>
      <th>Labels</th>
      <td>
            clang
      </td>
    </tr>

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

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

<pre>
    When declaring a C++ variable as `constexpr`, clang doesn't emit `DW_AT_const_expr` inside the `DW_TAG_variable`.

See the following program for example:

```c++
#include <stddef.h>
constexpr size_t kPageSize = 0x1000;

int main(void) {
  __asm__ volatile("" ::"r"(kPageSize));
  return 0;
}
```

Compiled with:

```shell
$ clang++ -Wall -Wextra -pedantic -std=c++17 -gdwarf-5 -O0    program_with_constexpr.cc   -o program_with_constexpr
```

Using `clang version 19.0.0git (https://llvm.googlesource.com/llvm-project 3809e20afc68d7d03821f0ec59b928dcf9befbf4)`


Using `$ llvm-dwarfdump ./program_with_constexpr`

```
0x00000023:   DW_TAG_variable
 DW_AT_name      ("kPageSize")
                DW_AT_type (0x0000002d "const size_t")
                DW_AT_decl_file ("/home/user/test/program_with_constexpr.cc")
 DW_AT_decl_line (2)
                DW_AT_const_value (4096)
```
It's missing `DW_AT_const_expr` 

When I compile this with gcc:

```shell
$ g++ -Wall -Wextra -pedantic -std=c++17 -gdwarf-5 -O0    program_with_constexpr.cc   -o program_with_constexpr
```

```
0x0000005b:   DW_TAG_variable
 DW_AT_name      ("kPageSize")
 DW_AT_decl_file ("/home/user/test/program_with_constexpr.cc")
 DW_AT_decl_line (2)
                DW_AT_decl_column (0x12)
                DW_AT_type      (0x00000041 "const size_t")
 DW_AT_const_expr        (true)
                DW_AT_location (DW_OP_addr 0x2008)
```
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJzMVs-vmzgQ_mucyyjIDEmAA4e8l82qp1ZqV--IjD2Adw2ObJOm_etXQJJNspu-HvZQC3Ew4_nxzTcfFt7rpicq2PqFrXcLMYTWuqI7it6GoBeVVd-Kt5Z6UCSNcLpvQMArwxeGL3AUTovKEAgPbMOl7X2g08GxDWf4CtKIvgFlyfcM0wDU6TDa7d7K7Zdysi7P5qB7rxVBaOls8WX7e3nxzzY8YnzH-HZ-f6bZsrbG2K9jTgdnGyc6qK0DOonuYIgl29szY07TI-fkz7uY6F6aQRGw5NUHpaiOWpb8Nn--VgRef6cywF-fREOf9ffRfAf8FHPOWfJyG0j3ATqhe4bZ0WrFMAeWni0AylL4rizhaI0I2hDDjCEyRBjzTbYM0U0b2TUUw3x8kqsPR2FwPdwETncPRd4m9Gq7gzak4KsO7TNUfEvGXDBZza07d3n5JoyB5RudghOwPJASfdASlj4oluzOeMYpLBv1Vbh6uYblRw4Al66UY-DyimUkJQAs7ZPPP6jkDz_2euzhxKwjOa9tD3Ee8Yg3I7kwa0M4-AnIPcO9MccuaqxtDHk7OEmRtN15f3lw9k-SAZKM54Rc1HKTqVTxJMO45iTXeZVjpmSdV1RX9Wrswn1CD2mNyE2eJxzU0B0gYrh_UueDq_uC-YlPCxOWbAHgcSJmKsyT1IuOYFozm26Yg2POZ9rcr_lo-Hag8dQ1nAKGOOV4pvz7PkZlKGttCC5k3re2I4b7wZNjuA_kw1MYIinvQtz4NLqffL6XwKwkR2GGyXzF8831xAOsHwLD1EOn_aVn_yVGt32ZxO8DyHmIILTaT4MEjZQ_OUy_3iA9Idu6-r_I9oswYzKW1gxdP7M8_qmBuJR3wWUV_3AqHil08cgwC26gdyIaK0UYZYxhtnsrP34qhVIO-Ak5z_7N44UqEpUnuVhQEadxvsY4TVaLtqiTuuLxus5iLmIueBpjkmU5SVFjWmGy0AVyXPENpsjX62QVYV7xrBJJFSMJkW_YilMntIkm1bSuWWjvByryTb5ZL4yoyPjpooB4_j_geGdwxaR51dB4tuJG--D_8RB0MFS8Pr8JjES7n77xH_5wm7jeNHy0GJwp7kW-0aEdqhtlfxB4hvupEM9wP9dyLPDvAAAA__-y4JmF">