aboutsummaryrefslogtreecommitdiff
path: root/gcc/testsuite
diff options
context:
space:
mode:
authorRichard Guenther <rguenther@suse.de>2010-05-09 14:13:25 +0000
committerRichard Biener <rguenth@gcc.gnu.org>2010-05-09 14:13:25 +0000
commit5588864d54667da6d2b7caf8d55f77e11a2c11ac (patch)
treec5d2b511af454b1d30c2f32c46c6173217d567a9 /gcc/testsuite
parent64ed87b4f83b55fcc0ab65686e9a2b7e2560ab61 (diff)
downloadgcc-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/ChangeLog5
-rw-r--r--gcc/testsuite/gcc.c-torture/compile/pr44043.c87
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);
+}