<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/144052>144052</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
switch statements expanded from macro are missing source locations
</td>
</tr>
<tr>
<th>Labels</th>
<td>
clang:frontend,
clang:diagnostics
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
tbaederr
</td>
</tr>
</table>
<pre>
See https://godbolt.org/z/rjzdsKqqh
```c++
#define S(a) switch(a){ default }
#define D default
#define C(x) case x
int foo(int a) {
switch(a) {
default
}
S(a);
switch(a) {
D
}
switch(a) {
C(10)
}
}
```
```console
<source>:13:17: error: expected ':' after 'default'
13 | default
| ^
| :
error: expected ':' after 'default'
<source>:19:11: error: expected ':' after 'default'
19 | D
| ^
| :
<source>:23:14: error: expected ':' after 'case'
23 | C(10)
| ^
| colon
4 errors generated.
```
the second emitted error does not have a valid source location.
Seems like this only happens if the entire switch is expanded from a macro.
</pre>
<img width="1" height="1" alt="" src="http://email.email.llvm.org/o/eJycVM2SozgMfhpxUU3KCAjhwCHpTC577CcwWATPGjtjO7098_RbJqR7wvZ27Q7lAlsq6ftBZRmCPlvmFqoDVMdMXuPofBs7yYq9zzqnfrTPzDjGeAlQ7IFOQKezU50zceP8Gej0E-jkv_1U4Y_v30cQ-7S24rZ6oENaYg9UKB60ZXwG2kmgBsNfOvbjcoL6gIoHeTURoT4ufX6tO97zD9EnoN1r6tbLwPh6K9I24uAc0C7tZjCoD7fcI-wSx_vzDpFOb0TS4c4bisN78MNmx4_KP4NNInKReq8Kl83dzndX3gx2NjjDmGLFU3BX3zMUX6HY50V61VDskb13ft68XriPrBConv9mjXKI7NP5rpzqG4m8QKifVobgHFs_UH39PF8kzv-fxVpRk1757ytqHtkd_4X0Ws6N_ooMzfaW_5lMGs83JlQ8QD78_n8Y-Km7vTPOgtiXNxYBz2zZy8hqsxqcODIG7p1VyJOOieZcgspxQOsijvKFUeKLNFrhTSsa18uond3c5u6ZeQpo9J-McdQBnTU_cJSXC9uAesAEwjZqz8u8ow7JFmkVKxy8m1DiJHvvNplqC9UUjcy4zeuy2eViWzbZ2AqumkGWnG8rUalOEndbkgPteKAmlyrTLQmqxDYvclGIstkMuRD9ttvSjrZSdAyl4ElqszHmZUq3VKZDuHKbl6WoKDOyYxPmO4-oN9KeodgP3tnIVgER0NMvCaXl2boQdR9Srjpmvk19v3TXc4BSGB1ieEeKOhpuF_EhysgT27g2YbYApWecdAjantd-h-zqTbu6dnUcr92mdxPQKQEuny8X775xH4FOs84AdFqkvrT0dwAAAP__StOnCw">