<table border="1" cellspacing="0" cellpadding="8">
    <tr>
        <th>Issue</th>
        <td>
            <a href=https://github.com/llvm/llvm-project/issues/105960>105960</a>
        </td>
    </tr>

    <tr>
        <th>Summary</th>
        <td>
            [TySan] False positive with struct containing two lists
        </td>
    </tr>

    <tr>
      <th>Labels</th>
      <td>
            new issue
      </td>
    </tr>

    <tr>
      <th>Assignees</th>
      <td>
      </td>
    </tr>

    <tr>
      <th>Reporter</th>
      <td>
          tavianator
      </td>
    </tr>
</table>

<pre>
    I am trying out #76261 (commit 733b3ed3f7441453889157834e0a5b6c288bf976).  The following file

```c
struct node {
        struct node *prev, *next;
};

struct list {
        unsigned long n;
        struct node *head, *tail;
};

void list_init(struct list *list) {
        list->n = 0;
        list->head = list->tail = 0;
}

struct lists {
        struct list foo;
        struct list bar;
};

int main(void) {
        struct lists *lists = __builtin_malloc(sizeof(*lists));
        if (lists) {
                list_init(&lists->foo);
                list_init(&lists->bar);
                for (struct node *node = lists->foo.head; node; node = node->next);
        }
        return 0;
}
```

gives a false positive:

```console
tavianator@tachyon $ ~/code/llvm/llvm-project/build/bin/clang -g -fsanitize=type foo.c -o foo
tavianator@tachyon $ ./foo
==478819==ERROR: TypeSanitizer: type-aliasing-violation on address 0x5590bcd3e2a8 (pc 0x559084519178 bp 0x7ffc5c0f0100 sp 0x7ffc5c0f00a8 tid 478819)
READ of size 8 at 0x5590bcd3e2a8 with type any pointer (in lists at offset 8) accesses an existing object of type any pointer (in list at offset 8)
    #0 0x559084519177 in main /home/tavianator/code/bfs/foo.c:25:39
```
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJx8VU2P4ygQ_TXkUkqEC3_ggw_pTUfa00o9fW9hDAkrApEh6c4c9revIPZ0kulpyQqkKNd7Va_KiBDMzinVkeqJVJuFOMW9H7sozkY4Ef246P1w6f4GcYA4XozbgT9FIMiaGusCCHLpDwcToWGsZ2pguinLoqwY521RNZyVioqqryVy3uu2qQm2K4DXvQLtrfXvKaQ2VhG6IXQ9_db0-sjr_xDHk4zg_KCANE-za3tnx_VxVGeCf6WtUx-RsNmz2XzubwNaE-JdwJPL5RjAercDd_PWI9ZeiWHCisLYb7DO3gwZ6c04EwnyO3Bcp5Vge8cj2ZaEPTsgbAP0lsd8lAjk09mQaDy6N5s_ZB2-qmNmpL3_Iu181IvxmzyNi3AQxhHkKeXHlO7Br2mHzPftrT8ZG417OwhrvUwlMj-V1wT57EiwTc8NMaNT882Hd1BTleZ6E6yzWypSyu4-zjfOKd_fnLUf4VPEuR2u66TGjLTKTcKeste8Zq-0yfqmNn2A-NSsHVU8je5LQecJuVVgZ84qgAAtbFBw9MFEc1aErb-eLe-Cn-fuc-BJSaOQ-4t3QLCE_whuZaKPW2vPh2lZHkf_r5KR4DZpN6Q1Kb-VVrgdLHew1EE4E81PRdgmXo5p3P1KwtLnDvsedEVw-8uLsA1hm7LhvGiv--eXl39eCFvD6-WofkwwYzIkoKWwRgTjdsuz8VZE4x14B2IYRhUC0I-qamkvB6ZQ8CTlUU5GXlZFWzQc-iPQj0ZrWUmqaUEphDsLFRyiGWAihe2V6cvzegNeQ-pe4CDiI9i7ifvMEYS7wNEbF1XuJuOmwRARvNZBReCpq4WUKoQkqgP1YULMH-A-lT4BfRPqIdKVIACkTze9z7cB4_LkAsHt3h-S1jfS_NK_1-Gqy0oStsaKsDVrH5pqMXRsaFkrFqorGiwrxuqSLfZdXyhVlBWvBWWaYil7WdW1Lgakoi7qemE6pFhSjiUWtEG2GtqypZwiCt02pWakpOogjF2lBlz5cbcwIZxUV9CqrenCil7ZkO8xRKfeIZ8SxHStjV3u2v60C6SkudSfYaKJNl-Ar5cfwpFqA9u7AbrKNg289C4K45IO8d1fVVucRtvtYzyGNGu4Jbjdmbg_9SvpD38cnMwvVXRK4Nzh_wEAAP__kro7bA">