<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/151602>151602</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
[Clang] Local class is not nested to a member function in DWARF after optimization
</td>
</tr>
<tr>
<th>Labels</th>
<td>
clang
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
zhihaoy
</td>
</tr>
</table>
<pre>
test_dwarf.h
```cpp
#include <stdio.h>
namespace myns
{
struct myclass
{
int b;
myclass() : b(100)
{
class ctornested
{
public:
void foobar()
{
printf("assert %s\n", a);
}
char *a;
} wat;
wat.foobar();
putc(b, stderr);
}
};
} // namespace myns
__attribute__((__visibility__("default"))) extern void fglobal();
```
test_dwarf.cpp
```cpp
#include "test_dwarf.h"
void fglobal()
{
myns::myclass{};
}
```
clang --version
```
clang version 19.1.7 (RESF 19.1.7-2.module+el8.10.0+1965+112b558b)
Target: aarch64-redhat-linux-gnu
Thread model: posix
InstalledDir: /usr/bin
Configuration file: /etc/clang/aarch64-redhat-linux-gnu-clang.cfg
```
Compile the program with `clang++ -g -O3 -std=c++17 -shared -fPIC -fvisibility=hidden -o libtest_dwarf.so *.cpp`
llvm-dwarfdump libtest_dwarf.so [rel.txt](https://github.com/user-attachments/files/21538092/rel.txt)
Class `ctornested` is now nested in a "subprogram" with no other info, where the `myns` namespace owns nothing about it, nor `myclass`. The local class doesn't have to be in a constructor; it happens to non-special member functions as well.
</pre>
<img width="1" height="1" alt="" src="http://email.email.llvm.org/o/eJx8VUuPozgQ_jXOpQQypnkdcshjIo200q5mR9pjZKAAr4yN7KLTPb9-ZaC3k-6ZiVAsV331_mxL71VvEPcsO7LsvJMzDdbtfwxqkPZ1V9v2dU_o6drepOvigfEDy_n6NdMUtiJVptFzi8DSk6dW2Xhg6Zeg4gcjR_STbBDGV-ODrDgyfvDk5oZgfG209O9iAABlCGqWvm3fIKJkogKWHqBmokw4Z6LaIO-24bfAoSHrDHrC9k71CASY5lqrhqUhUXi2qoXO2lq6NdgD9LPx5sIpQ91iIKT36AiYyDzLToYJwcQJZHCVfrRlxfmDpBmkAyYO8hHMijPcJG3Cm6T4IccH7DRTw0RZh7CeWnTuAbLGDP-LKHhm4sLEBT5PiR-uV0nkVD0TXq9LtPJ6fVZe1Uoret1kosVOzpqWYqv1A3whdGbraK9tLfV9uv8TaA10R6-NUb8mmBAPZBRidfGTSPeUWopKDyw9vLGpON634XNOjZamhyh6RueVNR8Aq3bTQVLFSVwAE-W3L39ftm0k4tG2s0YmjqjLOOExZ-KYVHkWlkTUWRYGFRL9Ll2PFKgtpWuG_Cly2A6SIq3M_BL1Zg6gwaFsYbQt6gCdrFcvjB--Gk9Sa2zPygU5E5fZOyYutQppn6zpVD87SSHVTmncQBioclkqYeLyq8DRAoibrv_co5MdJ6URaECYnO2dHOGmaIAwudXvkYkjRD1Ef6YQeWpZem5WaVJA5AfpsIWo--vrCaLunVssPQ-qbdFAZEGr-m7m3oYzshDlLQ-tn8do0bbzOP0Enx0d6pheiGVnJsqBaFrosHC_VzTMddzYcekcukgSyWYY0ZBn4hJaFlaRZGnJK8HE5c3byjJ-OC03Tqj6_dLJOSgPxt5gFYAyIAN__VxvzWJCrP0yFiwN6ECZzoazexvQrX1lOV_Im_O7M2pvJrimQZkeZG1nAkXBzli3Wqwkz3kM3wcEbRupt3uxtegNEwXBIJ8RyEKNa26NNeutbB1Lj6ACYprQ-AAy1kR-wkZJDSOONTroZtMEUnmQHm6odbxr92lbpZXc4T4psrSqqoRnu2FftVkhsg7TskpEVVZ5WuYNZrJ4KvO84cVO7QUXGS_SRCRZKbK4Luta8FbUOc9l0bXsieMolY7DsGPr-p3yfsZ9kiU5Fzsta9R-ecOE2LgnwnPm9gs76rn37Ilr5cm_uyBFenn4TotFdoY_7jq1jI_exkcW5MfKQ9_O_xy-XUB2hA7sRGpUP5ajtpud3v-GaSGJbYkmZ__Fhpi4LEUFtm11Pe_FfwEAAP__3fZKMQ">