| /* { dg-additional-options "-O1" } */ |
| |
| struct list_head { |
| struct list_head *next, *prev; |
| }; |
| |
| struct mbochs_dmabuf { |
| /* [...snip...] */ |
| struct dma_buf *buf; |
| /* [...snip...] */ |
| struct list_head next; |
| /* [...snip...] */ |
| }; |
| |
| void mbochs_close(struct list_head *dmabufs, |
| struct mbochs_dmabuf *dmabuf, |
| struct mbochs_dmabuf *tmp) |
| { |
| /* [...snip...] */ |
| while (&dmabuf->next != dmabufs) |
| { |
| dmabuf = tmp; |
| tmp = ((struct mbochs_dmabuf *)((void *)(tmp->next.next) - __builtin_offsetof(struct mbochs_dmabuf, next))); |
| } |
| |
| /* [...snip...] */ |
| } |