tavianator wrote:

Here's the new testcase.  Not sure if this bug is related or not.  It has to do 
with `memcpy()`; if you replace the call with the commented-out line above it, 
it works.

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

struct list {
        struct node *head, **tail;
};

int main(void) {
        struct list *list = __builtin_malloc(sizeof(*list));
        list->head = 0;
        list->tail = &list->head;

        struct node *node = __builtin_malloc(sizeof(*node));
        node->next = 0;

        *list->tail = node;
        list->tail = &node->next;

        while (list->head) {
                struct node *node = list->head;
                // list->head = node->next;
                __builtin_memcpy(&list->head, &node->next, sizeof(list->head));
                node->next = 0;
        }

        return 0;
}
```

```console
tavianator@tachyon $ ~/code/llvm/llvm-project/build/bin/clang -Wall -g 
-fsanitize=type foo.c -o foo
tavianator@tachyon $ ./foo
==5885==ERROR: TypeSanitizer: type-aliasing-violation on address 0x55af02a8c2a0 
(pc 0x55aef600fb36 bp 0x7ffcbf810cf0 sp 0x7ffcbf810c90 tid 5885)
READ of size 8 at 0x55af02a8c2a0 with type any pointer (in list at offset 0) 
accesses an existing object of type any pointer (in node at offset 0)
    #0 0x55aef600fb35 in main /home/tavianator/code/bfs/foo.c:20:15

```

https://github.com/llvm/llvm-project/pull/108385
_______________________________________________
llvm-branch-commits mailing list
llvm-branch-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-branch-commits

Reply via email to