This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
[PATCH] Fix PR44043
- From: Richard Guenther <rguenther at suse dot de>
- To: gcc-patches at gcc dot gnu dot org
- Date: Sun, 9 May 2010 16:11:59 +0200 (CEST)
- Subject: [PATCH] Fix PR44043
A missing return statement ...
Bootstrapped and tested on x86_64-unknonw-linux-gnu, applied to trunk.
Richard.
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.
Index: gcc/ipa-inline.c
===================================================================
*** gcc/ipa-inline.c (revision 159196)
--- gcc/ipa-inline.c (working copy)
*************** estimate_function_body_sizes (struct cgr
*** 1835,1844 ****
--- 1835,1847 ----
if (node->local.disregard_inline_limits)
{
+ if (dump_file)
+ fprintf (dump_file, "Disregarding inline limits.\n");
inline_summary (node)->self_time = 0;
inline_summary (node)->self_size = 0;
inline_summary (node)->time_inlining_benefit = 0;
inline_summary (node)->size_inlining_benefit = 0;
+ return;
}
if (dump_file)
Index: gcc/testsuite/gcc.c-torture/compile/pr44043.c
===================================================================
*** gcc/testsuite/gcc.c-torture/compile/pr44043.c (revision 0)
--- gcc/testsuite/gcc.c-torture/compile/pr44043.c (revision 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);
+ }