diff options
author | Richard Guenther <rguenther@suse.de> | 2010-05-09 14:13:25 +0000 |
---|---|---|
committer | Richard Biener <rguenth@gcc.gnu.org> | 2010-05-09 14:13:25 +0000 |
commit | 5588864d54667da6d2b7caf8d55f77e11a2c11ac (patch) | |
tree | c5d2b511af454b1d30c2f32c46c6173217d567a9 /gcc/testsuite | |
parent | 64ed87b4f83b55fcc0ab65686e9a2b7e2560ab61 (diff) | |
download | gcc-5588864d54667da6d2b7caf8d55f77e11a2c11ac.zip gcc-5588864d54667da6d2b7caf8d55f77e11a2c11ac.tar.gz gcc-5588864d54667da6d2b7caf8d55f77e11a2c11ac.tar.bz2 |
re PR tree-optimization/44043 (sorry, unimplemented: inlining failed in call to 'dst_output': optimizing for size and code size would grow)
2010-05-09 Richard Guenther <rguenther@suse.de>
PR middle-end/44043
* ipa-inline.c (estimate_function_body_sizes): Return after
disregarding inline limits.
* gcc.c-torture/compile/pr44043.c: New testcase.
From-SVN: r159200
Diffstat (limited to 'gcc/testsuite')
-rw-r--r-- | gcc/testsuite/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/testsuite/gcc.c-torture/compile/pr44043.c | 87 |
2 files changed, 92 insertions, 0 deletions
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 2c4e31c..bd28f18 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,5 +1,10 @@ 2010-05-09 Richard Guenther <rguenther@suse.de> + PR middle-end/44043 + * gcc.c-torture/compile/pr44043.c: New testcase. + +2010-05-09 Richard Guenther <rguenther@suse.de> + * gcc.dg/ipa/ipa-pta-11.c: Make p and q referenced. 2010-05-09 Eric Botcazou <ebotcazou@adacore.com> diff --git a/gcc/testsuite/gcc.c-torture/compile/pr44043.c b/gcc/testsuite/gcc.c-torture/compile/pr44043.c new file mode 100644 index 0000000..943501b --- /dev/null +++ b/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); +} |