1 // SPDX-License-Identifier: GPL-2.0-only
2 /* Copyright (c) 2020 Facebook */
3 #include <stddef.h>
4 #include <linux/bpf.h>
5 #include <bpf/bpf_helpers.h>
6 
7 __attribute__ ((noinline))
f1(struct __sk_buff * skb)8 int f1(struct __sk_buff *skb)
9 {
10 	return skb->len;
11 }
12 
13 int f3(int, struct __sk_buff *skb);
14 
15 __attribute__ ((noinline))
f2(int val,struct __sk_buff * skb)16 int f2(int val, struct __sk_buff *skb)
17 {
18 	return f1(skb) + f3(val, skb + 1); /* type mismatch */
19 }
20 
21 __attribute__ ((noinline))
f3(int val,struct __sk_buff * skb)22 int f3(int val, struct __sk_buff *skb)
23 {
24 	return skb->ifindex * val;
25 }
26 
27 SEC("tc")
test_cls(struct __sk_buff * skb)28 int test_cls(struct __sk_buff *skb)
29 {
30 	return f1(skb) + f2(2, skb) + f3(3, skb);
31 }
32