<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/75460>75460</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
DWARF debug info for 32-bit variable has a 64-bit composite location description
</td>
</tr>
<tr>
<th>Labels</th>
<td>
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
dstenb
</td>
</tr>
</table>
<pre>
LLVM commit: https://github.com/llvm/llvm-project/commit/ef35da825f38a86e4621c13a2898d561da88991c
When compiling the following program:
```
volatile int a;
int b;
long c;
char d;
long long e;
void main() {
int f = c < 6;
long long g = f;
d = g ^= e;
b = 0;
for (; b < 10; b++)
for (; a;) // break here and print f
for (;;)
;
}
```
for i386 using:
```
clang -m32 -O3 -g reduce30841.c
```
GDB 13.2 will emit an error when trying to print `f`:
```
(gdb) b 12
Breakpoint 1 at 0x11f6: file reduce30841.c, line 12.
(gdb) run
Starting program: reduce30841.out
Breakpoint 1, main () at reduce30841.c:12
12 for (; a;)
(gdb) p f
access outside bounds of object referenced via synthetic pointer
```
The `DW_AT_location` in question looks like:
```
0x0000008a: DW_TAG_variable
DW_AT_location (indexed (0x1) loclist = 0x00000025:
[0x000011e8, 0x000011ee): DW_OP_reg1 ECX, DW_OP_piece 0x4
[0x000011f6, 0x00001204): DW_OP_piece 0x4, DW_OP_reg1 ECX, DW_OP_piece 0x4)
DW_AT_name ("f")
DW_AT_decl_file ("reduce30841.c")
DW_AT_decl_line (7)
DW_AT_type (0x00000037 "int")
```
As seen, a 64-bit composite location description is emitted for the range [0x000011f6, 0x00001204).
The llvm.dbg.value for the 32-bit variable is changed to a 64-bit value by InstCombine:
```
-; *** IR Dump Before InstCombinePass on main ***
+; *** IR Dump After InstCombinePass on main ***
; ModuleID = 'reduce30841.c'
source_filename = "reduce30841.c"
target datalayout = "e-m:e-p:32:32-p270:32:32-p271:32:32-p272:64:64-i128:128-f64:32:64-f80:32-n8:16:32-S128"
@@ -15,39 +15,37 @@
entry:
%0 = load i32, ptr @c, align 4, !dbg !33, !tbaa !34
%cmp = icmp slt i32 %0, 6, !dbg !38
- %conv = zext i1 %cmp to i32, !dbg !38
- tail call void @llvm.dbg.value(metadata i32 %conv, metadata !31, metadata !DIExpression()), !dbg !39
- %conv1 = zext nneg i32 %conv to i64
+ %conv1 = zext i1 %cmp to i64
+ tail call void @llvm.dbg.value(metadata i64 %conv1, metadata !31, metadata !DIExpression()), !dbg !39
[...]
!8 = !DIBasicType(name: "int", size: 32, encoding: DW_ATE_signed)
!31 = !DILocalVariable(name: "f", scope: !27, file: !3, line: 7, type: !8)
```
but I don't know if that is an issue, or if this should be handled in later steps.
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJysV92O46gSfhpyU0pkcOw4F7lIOtOrlma1q93RzrlrYVN2OEPAx-D-2ac_KvzTSabVsyOtZTlQUF8V8FUVkd7rxiLuWHZg2XEh-3By3U75gLZclE697j5__utXqNz5rANL93AKofUs3TNxz8R9o8OpL1eVOzNxb8zT9LNsO_dfrAIT96OquMc6zZQsRFanhSxyXOeCVzyVotgWKsu5kkWx3fKKJUeW7Ifv1xNaMt5qo20D4YRQO2PcM_XazjWdPJMzFyosT8Y3dp-ckUEbBG0DSJYeBjH1yrlnnG2gmrvVSXagrkfjB2fZk9MKzlJbJgomtsA24wBEQzWw9AgVsPQO8lkJ4A2qiTPqizEVJQ2w7BM18GKojEPJhaR2HZDp9BAH74Ansc3EIb7baeLV1Lh-8jYeHpQdym9wwg5BWgVtF11_07zUHTTHsdkRtjm-u-vDl7R1WuTQe22bj8-pMtI2sDynApa_pbBsoEPVV5gmxZqvqg-s_HI8AE9XAp61MYBnHUBawK5zHTwTf0L3GsnjxhWyPKkJ40N_mCgaVdJmlcDFIDvQfrWOMDjIAMkL53VOUVETw64dFndgtEXgYnWL2PV2EP0ZZBeuqXyF4voAlz5eOkAGiIAwMlCGGwfS_eQ3FzA_37Ph1rt2ooCsKvQeXB-8Vgil663y4GpwJcU2dFhjh7ZCBU9agn-14YRBVxA9xO6DM_tyQjqG49fH_ZdH4yoZtLMsT0Bb-F-PnrpgnPvmwehv-PFRJS9JfApJ-0fP8evjl_0vj0-y07I0OLL22tq0IUwU2ip8QUXN5IXTHhhXGe3DEHYjvMgIfoqA7DDIOceCjmLuIW1pGq399vtjhw2HT3f_oSmDpNVYISQv6--R6vwCSSTrK6Q3vRnqI_DLDHD9DNtg5RnH5TMhaibEm8owQ2FlHiOx541iQtyQ_H2tSPxZa_NDZ8JrOzkz7Xa6ASaEtuHSxrtc2nvwiJY2QUK-XpY6xJLhvA4I83Er9FWn29jWPuaJgCrGA5WVTtoGf3AYq1sKU6lbqbJZPUnT44yViujERD8yV50IX1ESmp0clMpXeLA-3Llzqe0PmL6ksGViP7zw8Acc-3MLB6xdh5cwv0sKXDsliFFhivTD-zD7OmD3T1GoBsCvTvUGH44xTpjY3JBjM071ru8qjFyKtBtmf0-lYXaQXYMBlAzSyNeYAof5uKQEicuWpftUxM-yFZvkusuvu9TK1_Gz1JwS356LYllHWTqMLutiAFnaOJ4PnT95ZPy4a-uErRNY8oyJu5RK6GFobmAYGr1HG7rX-RQjp7MkrsA4qUCngmjVho7UYpWQRjcWYlgzwVXZ0E-ajv1QShkF60vE6txGTE0NbwLhRkukld9AFSN5Bk1nn6Lq3_gSQPMJLbjJt3c1g9QGKmkMxJsPWyfX3GeiOGOQdGiTL2QpFqlJToj8VnJ8-PTSdug9FYBYyeJ75cb2dgH8bQXWYnNpMS4kX89Uf0_netVXk39qnfl6Bv9XFzp-s8NqtWLZdMMSvBgjgR8fDtLr6strSw5RTMXS9JYv78Drv6NwOFO0lVPDHWxIuZ8e48VfXdR_nvI3_M-ukuavqX5e2agnC5VrRxkXG5JQgI-CdLr_UD8OUo4fB4uPE3rZB3gARdu0CfDNumfQNYSTDJRJJaVvTydxB3S_pBHtwZ9cbxSUCCdplUFFVwkjKaP5gK1fLdQuVdt0Kxe445tEZBnnPFucdlxluSpUVhRK1TnnWy4ET0SdVnK7LWq-0DuRiJQLvuZJxrNstd1sik2-ESnyPKsqwdYJnqU2q8gV1zWL6OFuk63zZGFkicZP_7C6Xfx_VPaNJ3JpH_ybWtDB4O74df_HPSgs-wa0rV2sK7c15ST9Py13i74zu5_-3xaX4Jm4j6v4fwAAAP__AAvmAA">