enforce experimental tag at beginning of declarations
authorDavid Marchand <david.marchand@redhat.com>
Sat, 29 Jun 2019 11:58:53 +0000 (13:58 +0200)
committerThomas Monjalon <thomas@monjalon.net>
Sat, 29 Jun 2019 17:04:48 +0000 (19:04 +0200)
commit18218713bf4248c4c6b97a12231e7d59b8a86865
tree380e87a089b57686fc4c8f99043a1ea4da4d5b8f
parentcfe3aeb170b2f6277e6f96173599da51eab0654f
enforce experimental tag at beginning of declarations

Putting a '__attribute__((deprecated))' in the middle of a function
prototype does not result in the expected result with gcc (while clang
is fine with this syntax).

$ cat deprecated.c
void * __attribute__((deprecated)) incorrect() { return 0; }
__attribute__((deprecated)) void *correct(void) { return 0; }
int main(int argc, char *argv[]) { incorrect(); correct(); return 0; }
$ gcc -o deprecated.o -c deprecated.c
deprecated.c: In function ‘main’:
deprecated.c:3:1: warning: ‘correct’ is deprecated (declared at
deprecated.c:2) [-Wdeprecated-declarations]
 int main(int argc, char *argv[]) { incorrect(); correct(); return 0; }
 ^

Move the tag on a separate line and make it the first thing of function
prototypes.
This is not perfect but we will trust reviewers to catch the other not
so easy to detect patterns.

sed -i \
     -e '/^\([^#].*\)\?__rte_experimental */{' \
     -e 's//\1/; s/ *$//; i\' \
     -e __rte_experimental \
     -e '/^$/d}' \
     $(git grep -l __rte_experimental -- '*.h')

Special mention for rte_mbuf_data_addr_default():

There is either a bug or a (not yet understood) issue with gcc.
gcc won't drop this inline when unused and rte_mbuf_data_addr_default()
calls rte_mbuf_buf_addr() which itself is experimental.
This results in a build warning when not accepting experimental apis
from sources just including rte_mbuf.h.

For this specific case, we hide the call to rte_mbuf_buf_addr() under
the ALLOW_EXPERIMENTAL_API flag.

Signed-off-by: Adrien Mazarguil <adrien.mazarguil@6wind.com>
Signed-off-by: David Marchand <david.marchand@redhat.com>
58 files changed:
devtools/checkpatches.sh
drivers/net/ixgbe/rte_pmd_ixgbe.h
drivers/net/softnic/rte_eth_softnic.h
lib/librte_bbdev/rte_bbdev.h
lib/librte_bbdev/rte_bbdev_op.h
lib/librte_bbdev/rte_bbdev_pmd.h
lib/librte_bpf/rte_bpf.h
lib/librte_bpf/rte_bpf_ethdev.h
lib/librte_compressdev/rte_comp.h
lib/librte_compressdev/rte_compressdev.h
lib/librte_compressdev/rte_compressdev_pmd.h
lib/librte_cryptodev/rte_cryptodev.h
lib/librte_eal/common/include/arch/x86/rte_atomic_64.h
lib/librte_eal/common/include/generic/rte_atomic.h
lib/librte_eal/common/include/generic/rte_cycles.h
lib/librte_eal/common/include/generic/rte_rwlock.h
lib/librte_eal/common/include/generic/rte_ticketlock.h
lib/librte_eal/common/include/rte_dev.h
lib/librte_eal/common/include/rte_eal.h
lib/librte_eal/common/include/rte_fbarray.h
lib/librte_eal/common/include/rte_interrupts.h
lib/librte_eal/common/include/rte_lcore.h
lib/librte_eal/common/include/rte_malloc.h
lib/librte_eal/common/include/rte_memory.h
lib/librte_eal/common/include/rte_random.h
lib/librte_eal/common/include/rte_service.h
lib/librte_ethdev/rte_ethdev.h
lib/librte_ethdev/rte_ethdev_driver.h
lib/librte_ethdev/rte_flow_driver.h
lib/librte_ethdev/rte_mtr.h
lib/librte_eventdev/rte_event_eth_rx_adapter.h
lib/librte_flow_classify/rte_flow_classify.h
lib/librte_hash/rte_hash.h
lib/librte_ip_frag/rte_ip_frag.h
lib/librte_ipsec/rte_ipsec.h
lib/librte_ipsec/rte_ipsec_group.h
lib/librte_ipsec/rte_ipsec_sa.h
lib/librte_kni/rte_kni.h
lib/librte_mbuf/rte_mbuf.h
lib/librte_meter/rte_meter.h
lib/librte_net/rte_arp.h
lib/librte_net/rte_net.h
lib/librte_pipeline/rte_port_in_action.h
lib/librte_pipeline/rte_table_action.h
lib/librte_power/rte_power_empty_poll.h
lib/librte_rcu/rte_rcu_qsbr.h
lib/librte_sched/rte_sched.h
lib/librte_security/rte_security.h
lib/librte_stack/rte_stack.h
lib/librte_stack/rte_stack_lf.h
lib/librte_stack/rte_stack_std.h
lib/librte_table/rte_table_hash_func.h
lib/librte_telemetry/rte_telemetry.h
lib/librte_telemetry/rte_telemetry_parser.h
lib/librte_timer/rte_timer.h
lib/librte_vhost/rte_vdpa.h
lib/librte_vhost/rte_vhost.h
lib/librte_vhost/rte_vhost_crypto.h