Compiling a C++ application that includes directly or indirectly rte_common.h will cause a warning: include/rte_common.h:350:37: warning: ISO C++17 does not allow ‘register’ storage class specifier [-Wregister] rte_combine32ms1b(register uint32_t x) C++ pickier than standard C and flags this antique usage. This is a bugfix please apply to 20.05. The register keyword is an old K&R legacy and should be removed everywhere in DPDK. For now, fix it where it hurts. Checkpatch should also be able to flag use of register keyword. Fixes: 08f683174e94 ("eal: add functions for previous power of 2 alignment") Cc: pbhagavatula@caviumnetworks.com Signed-off-by: Stephen Hemminger <stephen@networkplumber.org> --- lib/librte_eal/include/rte_common.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/librte_eal/include/rte_common.h b/lib/librte_eal/include/rte_common.h index 668e8b0af87d..0843ce69e7ec 100644 --- a/lib/librte_eal/include/rte_common.h +++ b/lib/librte_eal/include/rte_common.h @@ -409,7 +409,7 @@ __extension__ typedef uint64_t RTE_MARKER64[0]; * The combined value. */ static inline uint32_t -rte_combine32ms1b(register uint32_t x) +rte_combine32ms1b(uint32_t x) { x |= x >> 1; x |= x >> 2; @@ -431,7 +431,7 @@ rte_combine32ms1b(register uint32_t x) * The combined value. */ static inline uint64_t -rte_combine64ms1b(register uint64_t v) +rte_combine64ms1b(uint64_t v) { v |= v >> 1; v |= v >> 2; -- 2.20.1
On 09-May-20 12:25 AM, Stephen Hemminger wrote:
> Compiling a C++ application that includes directly or indirectly
> rte_common.h will cause a warning:
>
> include/rte_common.h:350:37: warning: ISO C++17 does not allow ‘register’ storage class specifier [-Wregister]
> rte_combine32ms1b(register uint32_t x)
>
> C++ pickier than standard C and flags this antique usage.
>
> This is a bugfix please apply to 20.05.
> The register keyword is an old K&R legacy and should be removed
> everywhere in DPDK. For now, fix it where it hurts.
> Checkpatch should also be able to flag use of register keyword.
>
> Fixes: 08f683174e94 ("eal: add functions for previous power of 2 alignment")
> Cc: pbhagavatula@caviumnetworks.com
> Signed-off-by: Stephen Hemminger <stephen@networkplumber.org>
> ---
I remember similar patches already being submitted, and the community
has decided that 'register' keyword was worth keeping (although i don't
recall the reasoning). Has something changed since then?
--
Thanks,
Anatoly
On Mon, May 11, 2020 at 09:56:10AM +0100, Burakov, Anatoly wrote:
> On 09-May-20 12:25 AM, Stephen Hemminger wrote:
> > Compiling a C++ application that includes directly or indirectly
> > rte_common.h will cause a warning:
> >
> > include/rte_common.h:350:37: warning: ISO C++17 does not allow ‘register’ storage class specifier [-Wregister]
> > rte_combine32ms1b(register uint32_t x)
> >
> > C++ pickier than standard C and flags this antique usage.
> >
> > This is a bugfix please apply to 20.05.
> > The register keyword is an old K&R legacy and should be removed
> > everywhere in DPDK. For now, fix it where it hurts.
> > Checkpatch should also be able to flag use of register keyword.
> >
> > Fixes: 08f683174e94 ("eal: add functions for previous power of 2 alignment")
> > Cc: pbhagavatula@caviumnetworks.com
> > Signed-off-by: Stephen Hemminger <stephen@networkplumber.org>
> > ---
>
> I remember similar patches already being submitted, and the community has
> decided that 'register' keyword was worth keeping (although i don't recall
> the reasoning). Has something changed since then?
>
I'm not sure anything has changed - and I don't see the need for register
keyword myself - but all headers must be includable in C++ code. Therefore
we need to remove register from rte_common.h
Acked-by: Bruce Richardson <bruce.richardson@intel.com>
On Mon, May 11, 2020 at 11:05 AM Bruce Richardson <bruce.richardson@intel.com> wrote: > > On Mon, May 11, 2020 at 09:56:10AM +0100, Burakov, Anatoly wrote: > > On 09-May-20 12:25 AM, Stephen Hemminger wrote: > > > Compiling a C++ application that includes directly or indirectly > > > rte_common.h will cause a warning: > > > > > > include/rte_common.h:350:37: warning: ISO C++17 does not allow ‘register’ storage class specifier [-Wregister] > > > rte_combine32ms1b(register uint32_t x) > > > > > > C++ pickier than standard C and flags this antique usage. > > > > > > This is a bugfix please apply to 20.05. > > > The register keyword is an old K&R legacy and should be removed > > > everywhere in DPDK. For now, fix it where it hurts. > > > Checkpatch should also be able to flag use of register keyword. > > > > > > Fixes: 08f683174e94 ("eal: add functions for previous power of 2 alignment") Cc: stable@dpdk.org > > > Signed-off-by: Stephen Hemminger <stephen@networkplumber.org> > Acked-by: Bruce Richardson <bruce.richardson@intel.com> Applied, thanks. -- David Marchand