<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/60189>60189</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
[AVR] clang crashes on pointer cast between address spaces
</td>
</tr>
<tr>
<th>Labels</th>
<td>
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
sprintersb
</td>
</tr>
</table>
<pre>
Trying to compile the following C code for, say, ATmega8:
```c++
#ifdef __clang__
#define __flash __attribute__((__address_space__(1)))
#endif
int getx (const int *x, char in_flash)
{
if (in_flash)
return *(const __flash int*) x;
else
return *x;
}
```
crashes clang v16:
```none
> avr-clang -Os foo.c -save-temps -mmcu=atmega8 -Wall -c
fatal error: error in backend: Cannot select: 0x556cb5bd2f30: i16 = addrspacecast[0 -> 1] 0x556cb5bd3010
0x556cb5bd3010: i16,ch = CopyFromReg 0x556cb5b500f0, Register:i16 %3
0x556cb5bd2de0: i16 = Register %3
In function: getx
clang: error: clang frontend command failed with exit code 70 (use -v to see invocation)
Ubuntu clang version 16.0.0 (++20230118052744+29d25f9e9a4c-1~exp1~20230118172840.512)
```
The code compiles fine with `avr-gcc`:
```none
getx:
movw r30,r24
tst r22
breq .L2
lpm r24,Z+
lpm r25,Z+
ret
.L2:
ld r24,Z
ldd r25,Z+1
ret
```
FYI, the default gcc behavior is to accept the code without diagnostic, except when `-Waddr-space-convert` or `-Werror=addr-space-convert` is on:
```none
foo.c: In function 'getx':
foo.c:8:9: warning: conversion from address space 'generic' to address space '__flash' [-Waddr-space-convert]
return *(const __flash int*) x;
^~~~~~
```
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJycVU-PqzYQ_zTOZURkTIBwyCGbvEhPqlRpte1Te0HGDOAW7NQ2Sfayn72yCUn2z-uhBAX4ef555jdjbq1sFeKGpE8k3S_46DptNvZopHJobLWodP26eTGvUrXgNAg9HGWP4DqERve9PvuFHQhde8AQtgPLX_1j-zJgy9ck2RK6J3RLMjrdgrAnf08oS2RTYwNlKXqu2rK84TU2UiGUZdNz20FZcueMrEaHZUnYmrB1WfK6NmhtaY9cTHBMWHG9Z0Ooatlcv8K_VA5adBcgbC20sg48Qtj24gMXHTcg1eT2bie_RgwAIBuv-kkGrpdBNxrlDd4czLuQygW4gAtJHixib_FnRu6SJN9_SOb0KQy3HVoIKYRTnH3OutLq6oAk34CfTDQJR79aaLReCogsP2HkcDhaiIZBjCTZcxeKCNEP3vcQiclCwx3vAY3RhiTb6QWkgoqLv1HVHttxpbQDiz0K5wF6SdNMVGlVsyahHpFxBiTZg69hqJ_g1pH0iULkQ4xJun_QSmhM5wR9QCdbhO1EFwzu9PH1YPTwjO1dNKW0ob68z9hK69BHHiJgaXJP_EOUNb6LclZ7UPiuoBmVcFIrL-kZdS2Hz-wtM_5lynVjtHKoat9GA1c1NFz2WMNZug7wIt3URzn17BotQnTyTWcRQaqTFjy4mtn2WzUqN841R2OlVhBnS7oM-lOXMcoSGsdrmrJ8tfJAUbO0KbDgKxHFb3g5xm-zUJyz9You05jdaf-eaC8dTjFeB4GF0KNhAySjnlatEF78PwgYEnVbp8WgT2cwia-OYasb7KwDw9jtuzL4Dyx_uQP9cQCvwHZ_3ufJDKcfYYNuevcmHrz39c3IHaofLMSfTXzIyuGP755ZfijW2PCxd9AKARV2_CR9a1hfRi4EHl2QCin0SdOjg1ryVmnrpPBG8BKkzh0qn9Hoh2-PKPRHJLQ6oXEko6DNtHpl2P5rKWkhcPOnpQid7wn6wGUgLA8lYvlNdZbz47zw8mdulJxIPvkL7GuMHuA6kyFEMxlTaPzu8pCGj8vlPEVzIOnTlxtO9-9n4_-ZsOEi6bc3f31Zxs__i3qT1EVS8AVu4ixfJUkWU7boNjSlfJXTNKFIKeVVnVRYVasmi7OMrkW2kJupqVj4rdgSi6ygRZPHWYqYZzFZURy47Jd9fxqW2rQLae2Im4zG62LR8wp7Ox_LZuOFompsLVnRXlpn72pOuj4c4Nvfn_3InObBfCJoBUcdDnPw4xUqdGdE9b4KdjGaftM5d7S-4uxA2KGVrhurpdADYQfv7PqIjkb_5Wc6O4SALWGHEPO_AQAA__83RmwO">