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

    <tr>
        <th>Summary</th>
        <td>
            `SIGSEGV` in `clang_getCursorPrettyPrinted()` (or, precisely, `StmtPrinter::Visit(clang::Stmt*)`)
        </td>
    </tr>

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

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

    <tr>
      <th>Reporter</th>
      <td>
          0x6675636b796f75676974687562
      </td>
    </tr>
</table>

<pre>
    I'm parsing C and C++ source code using _Libclang_ by calling `clang_visitChildren(CXCursor, CXCursorVisitor, CXClientData)` from a JVM, using [JVM bindings](https://github.com/bytedeco/javacpp-presets/tree/master/llvm) to _Libclang_.

In some complex cases (like the source code of _Linux_ kernel), the JVM process crashes with a `SIGSEGV` (Linux) or `EXCEPTION_ACCESS_VIOLATION` (Windows) inside `libclang.so`. This happens when my client code calls [`clang_getCursorPrettyPrinted()`](https://clang.llvm.org/doxygen/group__CINDEX__CURSOR__XREF.html#gab9d561cc237ce0d8bfbab80cdd5be216), and the exact location is [`StmtPrinter::Visit(clang::Stmt*)`](https://github.com/llvm-mirror/clang/blob/aa231e4be75ac4759c236b755c57876f76e3cf05/lib/AST/StmtPrinter.cpp#L67):

```console
C [libclang.so.16+0x86ac4a]  (anonymous namespace)::StmtPrinter::Visit(clang::Stmt*)+0x2a
```

I managed to pinpoint the problem: it occurs when I'm calling `clang_getCursorPrettyPrinted()` for a `CXCursor` instance of type `CXCursor_StructDecl` or `CXCursor_FunctionDecl`. Furtherore, _Libclang_ crashes trying to pretty-print the following function declaration:

```c
void *__kmalloc(size_t size, gfp_t flags) __attribute__((__assume_aligned__(__alignof__(unsigned long long)))) __attribute__((__malloc__));
```

One of the minimal reproducers is:

```c
void *f() __attribute__((__assume_aligned__(__alignof__(unsigned long long))));
```

_Libclang_ versions **15.0.3**, **16.0.4**, and **17.0.6** are all equally affected.

Original issue:
 - bytedeco/javacpp-presets#1442
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJy0Vl1zmzgU_TXyiyYMCPPhBz84OHTSaZtO3c3mjbmIC6gVEiuJJN5fvyNwUme3Tbs7szMeDFdCnHvO0b0Ca0WnELckuSTJfgWT67XZho9pmiVpnNbZJm2zJM3STbZO8yxJ2arWzXF7TVg20BGMFaqjBQXV0IKwS8IuqdWT4Ui5bpBO83j1TtRcguoqWh8pByl9lKThErwXVriiF7IxqAjLi7tiMlYbwgr6dH_r5zyHpEDl9uCAsA1JQ9oaPVCgb2_f-wnLR0ly-fb2Pa2FaoTqLEn2hOW9c6Ml8Y6wkrCyE66f6oDrgbCyPjpskGvCyi9wD3wcL0aDFp0lrHQGkbByAOvQEFZKeT8QtqFOnyUXkHBPwt1yvVbU6sHTMIwSHykHi5YSlkvxFanr8QVPuvXrqOmxol_RKJQ-MVbM83wWo9EcraXcgO3R0gfhegqewsP1m8PVm1vPAmH5vIYHpo0fvLorrj5-vr75UO2K4upwqG6vb97tfOA0_3ehGv1g_RtCWdGgf0ueEgqsJmkY0M-9sLSHcURl6UOPig5HymcNFvReUesJf5a0Q7fo9tGgc8ePRiiHDWH5Itj3xFg-6YkNtOkIKxv9eOy8IcrO6GmsquL6w_7qrqqK3z4dbj5V1d2nqzLo3SAJizuoN02SRpyzOOMYNnnd1lDnIW-apEYWpSdGvVM9q_gI3FGpOTihFRVP-A9ucAtc46HFu9l5hOUzviXk5xC2-3EuL4zlU7oYhDHevkua3m5S14SVACyOcF1jlgBfZ8mGM7_tkoQnWZ6lbZZizNsw8esI_8Lu8Jmw8gxlwMeRsPhdmnk88e7chB7e_ONaWS1xiRY-1TORA0_OZfiYp8DXQJI99dYApdVx0JOlCga0I3A8fWAh4F-Q5Bdn8DdILzYLHUBBh43fUKNQoxbKzTKNRtcSBxLvqHBUcz6ZkweXEvSPYvIT59FWm2XjPFeZNPTed6D4vA_dccTz8ergzMTdHrn0U5eN9TxYTop7A52GA1pOxvVotEHvtrPK97R1nTl6wD7RGeHFaJ6SbbWU-sGPtqdlaYNcgpk9-kNtl-d7LRpK2K6qvg4gpeaE5Vb8iZWj_s-j6dqxcrSV0M07vqrAOSPqyWFVzQzlVQXWTgNWIH1jaOZ4tTzpdn6a1NwzGiq16ubLLPHp9_1FF0D-eZ4WX77ihRu1yNAjHYQSA0hqcDS6mTgaS4X9RR7aRfP_JcvXMzgT_R6NFVr5wr8jbBclQRjEy70X5BRNgzBYf4v6EnUayYIwSJd7CgYpSEnxjwmkPFJoW-QOmxdt58aITiiQVFg74TNV9IK-1t_iaL1mq2YbN5t4AyvcRlnINjljabTqt1ketQlEvMmTNWYJX7fxponzhLOMhSm2K7FlIYsjFm2iMM7WUQARtNCGaQRRmtRxQ9YhDiDkc3lfzfC2WbJh4UpCjdLOZxDGTvWR-eOI2c61s546S9ahFNbZbys44SRuX3ZAoX69EBCWL-eJ0SAXFuVxVuS_dAC2WU1Gbn_SA55awWj0F-SOsHImwR8vZh7-CgAA__-wUvfZ">