<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/143247>143247</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
clang generates incorrect code when storing to memory location 0x1 for target avr-none
</td>
</tr>
<tr>
<th>Labels</th>
<td>
clang
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
tomtor
</td>
</tr>
</table>
<pre>
sample code:
```
#define PA 0x1 // Bad
//#define PA 0x2 // Good
char *const PORT = (char *const) PA;
extern void nil(short);
void bug()
{
short s= 0;
while (1) {
s++;
*PORT = *PORT | 0x80;
nil((s & 0xF) + 1);
}
}
```
compiled with clang build from git yesterday:
`clang -O2 -target avr-none -mmcu=attiny402 -S bug.c`
generates an incorrect store (uses s which changes in each loop iteration instead of constant 0x1):
```
bug: ; @bug
; %bb.0: ; %entry
push r16
push r17
ldi r26, 0
ldi r27, 0
.LBB0_1: ; %while.cond
; =>This Inner Loop Header: Depth=1
ld r24, X+
ori r24, -128
movw r16, r26
andi r26, 15
andi r27, 0
st X+, r24
movw r24, r26
call nil
movw r26, r16
rjmp .LBB0_1
```
using `#define PA 0x2`
generates correct code:
```
bug: ; @bug
; %bb.0: ; %entry
push r16
push r17
ldi r24, 0
ldi r25, 0
.LBB0_1: ; %while.cond
; =>This Inner Loop Header: Depth=1
sbi 2, 7
adiw r24, 1
movw r16, r24
andi r24, 15
andi r25, 0
adiw r24, 1
call nil
movw r24, r16
rjmp .LBB0_1
```
</pre>
<img width="1" height="1" alt="" src="http://email.email.llvm.org/o/eJycVU-P6yYQ_zTkMkqEsWM7Bx-cl6at9KS3at-htwrbE5snDBHgbPLtK7CzSXa9f1RERMwMM78ZfsNwa0WrEAuy3pL1bsEH12lTON07bRaVbi6F5f1RItS6QRKXhIaZ0mnSkrC4wYNQCE8lhEHPERC2J2wPW94ElX2Yj4r0zK5qv2vdjJbrjhsgrKy1sg6efvz1E0i8A8LyBwlhG3gqSbwdT-HZoVFw0qIBJSRhue208VovKkFWDS1hud-mJcm8BIIiWO-Ejsrgf_DcCYneb-R9TcoAYAnb-hlfNwgr72BO_7NvQM_51eAIyaMCwlKg532wybYQvUAEINkuwNq9TjAta90fhcQGnoXroJZctVANQjZwMLqHVji4oHVoGn65v6RRc_mDwdJx06IDfjJLpRXCsu_rgcQ77pxQl4QyWP7t87OqX7y2qNBwhxa4AqFqbQzWDqzTJmRmsGjB-kzVHdQdVy1aEAqQ1x1IrY8gnDcgtD9uHfIG9AHCBXLlPE9C-DOk8hcVl0DiLZCE-i9ahg-2rqoV9bJPxqSNypnLdFN-HAfbgYnS11sAYKLsblc2IqyGpYR9Azoryq6i1fftlv4bfR1XoNeq1qoJjPOb8Y7Ev_3shIU_lUID330G_0DeoPF2d3h0HYl30QMSmJAkHsk_npg3qTbiXrqMWH4n7fXpeQw7BOjjvAm5GmOcoo_Ws7LsdWasG9cAJBhN5jyOeB491lxKv_pamTsygny4OPOrP8I1829qZrBCteA_3747MxS_svvdd26i5BfGR6z9iJbTZbzLzBvvkvcpuZ6h5Cznvjj-LzVtNSJiHs99YfFG3LMgnHnDxWSWb8kHXHyJe9bBND4jWfI5yd7wbJyLpoibTbzhCyyiLNmwTZLQaNEVyPIsanic03xTRZgyVuVszer4kKZ5Tg8LUTDK1jSlWRTRNIlWLM7XWYQZzde0OaQZSSj2XMiVlKd-pU27ENYOWERJzJJsIXmF0oYGzlh48Aljvpebwh9YVkNrSUKlsM7eTDjhJBZjf7gVwe2R92UAzx2q8Nz7SnIaeuy1uYDU9fio-0Z_0AZe9ZbFYGTROXe0vpBCh2-F64ZqVeuesL0HMS3Lo9G_sHaE7UNQlrD9FNepYP8FAAD__6d7QLw">