1 /* Reduced test case from PR53703. Used to ICE. */
3 /* { dg-do compile } */
4 /* { dg-options "-w" } */
6 typedef long unsigned int size_t;
7 typedef unsigned short int sa_family_t
;
9 typedef unsigned char __u8
;
10 typedef unsigned short __u16
;
11 typedef unsigned int __u32
;
28 unsigned short rta_len
;
29 unsigned short rta_type
;
32 struct ifaddrs
*ifa_next
;
33 unsigned short ifa_flags
;
35 typedef unsigned short int uint16_t;
36 typedef unsigned int uint32_t;
38 struct nlmsg_list
*nlm_next
;
41 struct rtmaddr_ifamap
{
47 int ifa_sa_len (int, int);
48 int usagi_getifaddrs (struct ifaddrs
**ifap
)
50 struct nlmsg_list
*nlmsg_list
, *nlmsg_end
, *nlm
;
51 size_t dlen
, xlen
, nlen
;
53 for (build
= 0; build
<= 1; build
++)
55 struct ifaddrs
*ifl
= ((void *)0), *ifa
= ((void *)0);
56 struct nlmsghdr
*nlh
, *nlh0
;
57 uint16_t *ifflist
= ((void *)0);
58 struct rtmaddr_ifamap ifamap
;
59 for (nlm
= nlmsg_list
; nlm
; nlm
= nlm
->nlm_next
)
61 int nlmlen
= nlm
->size
;
63 ((nlmlen
) >= (int)sizeof(struct nlmsghdr
)
64 && (nlh
)->nlmsg_len
>= sizeof(struct nlmsghdr
)
65 && (nlh
)->nlmsg_len
<= (nlmlen
));
66 nlh
= ((nlmlen
) -= ( (((nlh
)->nlmsg_len
)+4U -1) & ~(4U -1) ),
67 (struct nlmsghdr
*)(((char*)(nlh
))
68 + ( (((nlh
)->nlmsg_len
)+4U -1)
71 struct ifinfomsg
*ifim
= ((void *)0);
72 struct ifaddrmsg
*ifam
= ((void *)0);
74 sa_family_t nlm_family
= 0;
75 uint32_t nlm_scope
= 0, nlm_index
= 0;
76 __builtin_memset (&ifamap
, 0, sizeof (ifamap
));
77 switch (nlh
->nlmsg_type
)
80 ifim
= (struct ifinfomsg
*)
83 ( ((sizeof(struct nlmsghdr
))+4U -1)
87 ifam
= (struct ifaddrmsg
*)
90 ( ((sizeof(struct nlmsghdr
))+4U -1)
93 nlm_family
= ifam
->ifa_family
;
95 ifa
->ifa_flags
= ifflist
[nlm_index
];
102 void *rtadata
= ((void*)(((char*)(rta
))
103 + (( ((sizeof(struct rtattr
))+4 -1)
104 & ~(4 -1) ) + (0))));
105 size_t rtapayload
= ((int)((rta
)->rta_len
)
106 - (( ((sizeof(struct rtattr
))+4 -1)
108 switch (nlh
->nlmsg_type
)
113 if (nlm_family
== 17)
115 switch (rta
->rta_type
)
118 ifamap
.address
= rtadata
;
119 ifamap
.address_len
= rtapayload
;
121 ifamap
.local
= rtadata
;
125 if (nlh
->nlmsg_type
== RTM_NEWADDR
&& nlm_family
!= 17)
129 ifamap
.local
= ifamap
.address
;
130 ifamap
.local_len
= ifamap
.address_len
;
134 ifamap
.address
= ifamap
.local
;
136 if (ifamap
.address_len
!= ifamap
.local_len
137 || (ifamap
.address
!= ((void *)0)
138 && __builtin_memcmp (ifamap
.address
, ifamap
.local
,
139 ifamap
.address_len
)))
142 dlen
+= (((ifa_sa_len (nlm_family
,
143 ifamap
.address_len
))+4U -1)