<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/152113>152113</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
[LLDB] Cast to pointer-to-array-of-typeof-variable doesn't work
</td>
</tr>
<tr>
<th>Labels</th>
<td>
new issue
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
jacobef
</td>
</tr>
</table>
<pre>
`p *(typeof(*s)(*)[3])s`, where `s` is a pointer to (say) 3 elements, does not work.
**System**: M1 Macbook Air, macOS Sequoia 15.6 (24G84), see below for clang and lldb versions.
**Reproduction**:
```
$ clang --version
Apple clang version 17.0.0 (clang-1700.0.13.5)
Target: arm64-apple-darwin24.6.0
Thread model: posix
InstalledDir: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin
$ lldb --version
lldb-1700.0.9.502
Apple Swift version 6.1.2 (swiftlang-6.1.2.1.2 clang-1700.0.13.5)
$ cat > repro.c <<EOF
> int main(void) {
> char *s = "abc";
> }
> EOF
$ clang -g repro.c -o repro
$ lldb ./repro
(lldb) target create "./repro"
Current executable set to '/Users/friedman/Coding/Misc/repro' (arm64).
(lldb) break set -n main
Breakpoint 1: where = repro`main + 4 at repro.c:2:7, address = 0x000000010000037c
(lldb) run
Process 3984 launched: '/Users/friedman/Coding/Misc/repro' (arm64)
Process 3984 stopped
* thread #1, queue = 'com.apple.main-thread', stop reason = breakpoint 1.1
frame #0: 0x000000010000037c repro`main at repro.c:2:7
1 int main(void) {
-> 2 char *s = "abc";
3 }
Target 0: (repro) stopped.
(lldb) step
Process 3984 stopped
* thread #1, queue = 'com.apple.main-thread', stop reason = step in
frame #0: 0x0000000100000388 repro`main at repro.c:3:1
1 int main(void) {
2 char *s = "abc";
-> 3 }
Target 0: (repro) stopped.
(lldb) p *(typeof(*s)(*)[3])s
˄
╰─ error: expected expression
```
This also reproduces with LLDB 20.1.8, installed via Homebrew.
Notably, `p *(char(*)[3])s` works fine; this is only a problem with typeof.
`*(typeof(*s)(*)[3])s` is in fact a valid expression, i.e. LLDB is incorrect to reject it, because the following compiles fine in clang:
```c
int main(void) {
char *s = "abc";
*(typeof(*s)(*)[3])s;
}
```
</pre>
<img width="1" height="1" alt="" src="http://email.email.llvm.org/o/eJy8Vl-P2zYM_zTKC2FBluLEfshD_ly2Ae067G7AXmWZSdQ6livJyd23Hyj7_nXtrUWBBcadQFEkfz9SInUI9tghrlixYcVupod4cn71URtX42FWu-ZhxRaiBybXTJbxoUd3YLJkch2YrMYVLYqNYsWOySqwhWByC9cTegS2ECQAG0BD72wX0UN0wGQZ9AOTFSjAFs_YxUCnGocBOhfh6vwnDkys6SMX69uHEPE8rplaw_sc3mtTO_cJ1tbT4bM2H27hFj8PzmrIC74gP3L-SzlPsW4hIEKNrbvCwXkwre6OoLsG2rap4YI-WNcF_uTyT-y9awYTreueHNPuQkwfac4nQ1k2WWBive77Fif5JIV8yQUXFFKSZ_lSCC54rnhB4Yn1nfZHjIRN-_NinmkykjXaX20n53zByd_dyaNu4OwabEm1d8HeM7H-rQtRty02O-tJzuSegrBGU_SByf3fxjXIdd8zud-6Lo6c73d4wdb16Jnc3znXmpO2z_o7POihjfzexMc9JvdDIO3adhMBib-X-EnwCLDihZBPnNxe7SE-cbLgOZepGkicaEmiJP4GTYlxHYGpG_CUIW6AqS1T25sPe9pXN2C7COcUa3lxtqFCY8vNtGlO2lNBB2BqB0xKXRsmJVOPCmy5m1aTxeccH59cZm5cvqSAM7l_FpYkI9cxJRaMRx2RHD7rSWJmO3iPXQS8RzNEXbcIAeN4T5ZM7v8K6CkjB2-xOesuJbCx3ZHJ_XsbzLO1JXGZqofJir-OovaoPyXDWTeSI9YbkqV7CTlVzXRr1W7CthCkCExuYA46PoJnai2ZWi_pTumm8RhGLsW9GH95-quW5nUIfiCnf3hn6ISqyjm0eujMCZuxZn8C7ZeGQ3R9j814mSGO14ZJlVPQnwcccEr_0rgzT3eNE9hsVE2xbJMV8KiD65J6_YIwnjOxBgA4eH2mvCpBKP5Nwmsyv0JjMpMDABPVN0s3o4KUo9KbJQwAalQbC3l8V0CMFJcTedUjQ1-USYjY_z9ckidIZfjfJJblGyQqptb595EI8F0UJq5_gsQfapgj_q_82HbDyvkb-zeSVQXbiLSYs1IAeu_S-4_3PZqIDS3ofo7v8svOdXeirtyG6R1rBoMBrjae4N273Qak4DkvKW_2sbXAxWr41Z2x9nglxL87eq0eSOnFlEDMfmMySH09wMF2yNQGIoVgA7iufaABwbu6xfMYxEgdn4L-kfGDLNoODtpE0HDRrX3FAiHiyEeUSdU479GkB9fjR1rZSGo1Gj0EhHhCOLi2dVfbHcG4c29bHFGQo9QavpgM6OF7qwjfbkIpud8PeWxcY9N6DGDWrFRTqUrPcJUvi7kqy2VVzE6rvMGqPAi1RClr3SwKY2qFBZZ1aYqqrmd2JYUsRCmKXOQqLzgW9aKoEGWtqvl8qdhc4Fnblrft5cydP85sCAOu8kLmuZq1usY2pIlSyg6vkHYJW7Gb-RUdyurhGNhctDbE8Gwm2timUZRSw4odbHVIWZkmxyy6THuvHzJ3yEZmsov2NnVMGh07Jpfj7DgbfLs6xdgHSozcM7k_2ngaam7cmck9-Zz-Zb13lHQm9ylS6j0TlMtK_hMAAP__Rl07Mg">