<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/129201>129201</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
[alias] will bring in correctness when 2 objects part overlap
</td>
</tr>
<tr>
<th>Labels</th>
<td>
new issue
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
vfdff
</td>
</tr>
</table>
<pre>
* test: https://godbolt.org/z/Peb3G1zWx
```
typedef struct {
int a;
int b;
} S;
S g_info;
__attribute__((noinline))
int foo1(S * s)
{
int start = g_info.a;
s->b = 0;
int end = g_info.a;
return end - start;
}
```
* Now both gcc and clang think **s->b** will not alias to **g_info.a**, so start and end are same value, and return 0 derectlly.
But when &g_info and s are part overlap, **s->b** and **g_info.a** may be point to same address ?
- I already use -Wall to report all warning, but the **dangling pointer** is not identified by clang
</pre>
<img width="1" height="1" alt="" src="http://email.email.llvm.org/o/eJxsU8GO4zYM_Rr6QiRQ6DhODj54OnXRS1FgDnsMJIu21SpSIMlJs19fyDZmt8UAAmyJT4_vkaKM0YyOuYHqDar3Qs5p8qF5DHoYCuX1qwFqMXFMULY4pXSPULZAHVA3eq28TXsfRqDuO1D3J6vyt8P3b_-AaOEktiXa9Lqz5gFjCnOfEOo3EC0ionEJJZQ_b9W6hfodP7Zf0X7geDVu8J8H16tMKRg1J75egc5AZ-eNs8Yx0CUv0Wa2wfsD0PkDs424nm_pczgmGRJC-b7x73-IiTsof1VLTHwe5jvs9Bc31njgNAe3QHYr-aebFfNzVfKiFv_wT1Q-TTj2PUqnsbfSjZgm4_7OsoHaVcv6j09jLTqfUFojIya_gT71LDugXzD6zWBmzZpkYIzyxviQduYMyZFNtEDNgftk7Wuf3bzNCZ8TOwQ6rdy4wONCc8-8_sHBynsm-kJoBn8lDW_yhYrx7nM5k18lSa0Dx4hQdls5d_g7ShtY6hfOkXH3TVqb8YHvPruyFp8yOOPGrEDNCdPEW0ot3WiNG9csHLbUJi6lM5pdMoNhjeq1FrzQTakv5UUW3Bzqo6ipOolzMTVHVVaVLns9sFC6HA7nnvu6LKU8k6iEKExDgipBdBanqqTz_lKfaqqF5MORatn3cBR8k8burX3c8rgUJsaZmwNdSBwKKxXbuEwgkeMnLlEgygMZmnxpp-YxwlFYE1P8QZNMssvoLk8Bqvf1caiQjRuHvQ-5oy7XdWkloVd_cZ_if_pXzME2_5ttk6ZZ7Xt_A-pyvu2zuwefCYC6RWUE6jYbj4b-DQAA___4H0_R">