| /* { dg-do compile } */ |
| /* { dg-options "-Os" } */ |
| |
| struct list_head { |
| struct list_head *next; |
| }; |
| static inline __attribute__((always_inline)) void list_del_init(struct |
| list_head *entry) |
| { |
| __list_del(entry->next); |
| (entry)->next = (entry); |
| }; |
| struct dentry { |
| void *d_fsdata; |
| }; |
| struct sysfs_dirent { |
| struct list_head s_sibling; |
| struct list_head s_children; |
| }; |
| const char *sysfs_get_name(struct sysfs_dirent *); |
| void sysfs_hash_and_remove(struct dentry * dir, const char * name) |
| { |
| struct sysfs_dirent * sd; |
| struct sysfs_dirent * parent_sd = dir->d_fsdata; |
| for (sd = (struct sysfs_dirent *)((&parent_sd->s_children)->next); |
| &sd->s_sibling != (&parent_sd->s_children); |
| sd = (struct sysfs_dirent *)sd->s_sibling.next) { |
| if (!__builtin_strcmp(sysfs_get_name(sd), name)) |
| { |
| list_del_init(&sd->s_sibling); |
| break; |
| } |
| } |
| } |