aboutsummaryrefslogtreecommitdiffstats
path: root/gcc-4.9/gcc/testsuite/gcc.c-torture/compile/pr44043.c
diff options
context:
space:
mode:
Diffstat (limited to 'gcc-4.9/gcc/testsuite/gcc.c-torture/compile/pr44043.c')
-rw-r--r--gcc-4.9/gcc/testsuite/gcc.c-torture/compile/pr44043.c87
1 files changed, 87 insertions, 0 deletions
diff --git a/gcc-4.9/gcc/testsuite/gcc.c-torture/compile/pr44043.c b/gcc-4.9/gcc/testsuite/gcc.c-torture/compile/pr44043.c
new file mode 100644
index 000000000..943501b40
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/gcc.c-torture/compile/pr44043.c
@@ -0,0 +1,87 @@
+typedef unsigned char __u8;
+typedef unsigned short __u16;
+typedef unsigned int __u32;
+typedef unsigned long __kernel_size_t;
+typedef __kernel_size_t size_t;
+typedef __u8 uint8_t;
+typedef __u16 __be16;
+typedef __u32 __be32;
+struct msghdr {
+ struct iovec * msg_iov;
+ unsigned msg_flags;
+};
+enum { IPPROTO_ICMP = 1 };
+struct sk_buff { };
+static inline __attribute__((always_inline)) struct dst_entry *
+skb_dst(const struct sk_buff *skb)
+{
+};
+enum nf_inet_hooks { NF_INET_LOCAL_OUT };
+struct net_device {
+ unsigned mtu;
+};
+static inline __attribute__((always_inline)) int
+NF_HOOK_THRESH(uint8_t pf, unsigned int hook, struct sk_buff *skb,
+ struct net_device *in, struct net_device *out,
+ int (*okfn)(struct sk_buff *), int thresh)
+{
+ int ret = nf_hook_thresh(pf, hook, skb, in, out, okfn, thresh);
+ if (ret == 1)
+ ret = okfn(skb);
+ return ret;
+}
+static inline __attribute__((always_inline)) int
+NF_HOOK(uint8_t pf, unsigned int hook, struct sk_buff *skb,
+ struct net_device *in, struct net_device *out,
+ int (*okfn)(struct sk_buff *))
+{
+ return NF_HOOK_THRESH(pf, hook, skb, in, out, okfn, (-((int)(~0U>>1)) - 1));
+}
+struct dst_entry {
+ struct net_device *dev;
+ int (*output)(struct sk_buff*);
+};
+static inline __attribute__((always_inline)) int dst_output(struct sk_buff *skb) {
+ return skb_dst(skb)->output(skb);
+};
+struct iphdr {
+ __u8 protocol;
+};
+struct inet_sock {
+ __be16 inet_dport;
+ __u8 recverr: 1, hdrincl: 1;
+ struct { } cork;
+};
+struct icmphdr {
+ __u8 type;
+};
+struct rtable {
+ union { struct dst_entry dst; } u;
+ __be32 rt_dst;
+};
+struct sock;
+struct inet_sock *inet_sk (struct sock *);
+struct net *sock_net (struct sock *);
+void *skb_transport_header (struct sk_buff *);
+static int raw_send_hdrinc(struct sock *sk, void *from, size_t length,
+ struct rtable *rt, unsigned int flags)
+{
+ struct inet_sock *inet = inet_sk(sk);
+ struct net *net = sock_net(sk);
+ struct iphdr *iph;
+ struct sk_buff *skb;
+ if (length > rt->u.dst.dev->mtu)
+ ip_local_error(sk, 90, rt->rt_dst, inet->inet_dport, rt->u.dst.dev->mtu);
+ if (flags&0x10)
+ goto out;
+ if (iph->protocol == IPPROTO_ICMP)
+ icmp_out_count(net, ((struct icmphdr *)skb_transport_header(skb))->type);
+ NF_HOOK(2, NF_INET_LOCAL_OUT, skb, ((void *)0), rt->u.dst.dev,
+ dst_output);
+out:
+ while (0);
+}
+int raw_sendmsg(struct sock *sk, struct msghdr *msg, size_t len)
+{
+ raw_send_hdrinc(sk, msg->msg_iov, len, (void *)0, msg->msg_flags);
+}