DPDK patches and discussions
 help / color / mirror / Atom feed
From: Bruce Richardson <bruce.richardson@intel.com>
To: Stephen Hemminger <stephen@networkplumber.org>
Cc: dev@dpdk.org, pbhagavatula@marvell.com
Subject: Re: [PATCH 5/5] eventdev:  fix compilation with clang C++ builds
Date: Mon, 14 Mar 2022 09:00:20 +0000	[thread overview]
Message-ID: <Yi8EJNikc0mWwOWK@bricha3-MOBL.ger.corp.intel.com> (raw)
In-Reply-To: <20220311171102.70e3d1f9@hermes.local>

On Fri, Mar 11, 2022 at 05:11:02PM -0800, Stephen Hemminger wrote:
> On Fri, 11 Mar 2022 20:05:23 +0000
> Bruce Richardson <bruce.richardson@intel.com> wrote:
> 
> > When compiling on FreeBSD with clang and include checking enabled,
> > errors are emitted due to differences in how empty structs/unions are
> > handled in C and C++, as C++ structs cannot have zero size.
> > 
> > ../lib/eventdev/rte_eventdev.h:992:2: error: union has size 0 in C, non-zero size in C++
> > 
> > Since the contents of the union are all themselves of zero size,
> > the actual union wrapper is unnecessary. We therefore remove it for C++
> > builds - though keep it for C builds for safety and clarity of
> > understanding the code. The alignment constraint on the union is
> > unnecessary in the case where the whole struct is aligned on a 16-byte
> > boundary, so we add that constraint to the overall structure to ensure
> > it applies for C++ code as well as C.
> > 
> > Fixes: 1cc44d409271 ("eventdev: introduce event vector capability")
> > Cc: pbhagavatula@marvell.com
> > 
> > Signed-off-by: Bruce Richardson <bruce.richardson@intel.com>
> > ---
> >  lib/eventdev/rte_eventdev.h | 12 +++++++++++-
> >  1 file changed, 11 insertions(+), 1 deletion(-)
> > 
> > diff --git a/lib/eventdev/rte_eventdev.h b/lib/eventdev/rte_eventdev.h
> > index 67c4a5e036..42a5660169 100644
> > --- a/lib/eventdev/rte_eventdev.h
> > +++ b/lib/eventdev/rte_eventdev.h
> > @@ -984,21 +984,31 @@ struct rte_event_vector {
> >  	};
> >  	/**< Union to hold common attributes of the vector array. */
> >  	uint64_t impl_opaque;
> > +
> > +/* empty structures do not have zero size in C++ leading to compilation errors
> > + * with clang about structure having different sizes in C and C++.
> > + * Since these are all zero-sized arrays, we can omit the "union" wrapper for
> > + * C++ builds, removing the warning.
> > + */
> > +#ifndef __cplusplus
> >  	/**< Implementation specific opaque value.
> >  	 * An implementation may use this field to hold implementation specific
> >  	 * value to share between dequeue and enqueue operation.
> >  	 * The application should not modify this field.
> >  	 */
> >  	union {
> > +#endif
> >  		struct rte_mbuf *mbufs[0];
> >  		void *ptrs[0];
> >  		uint64_t *u64s[0];
> > +#ifndef __cplusplus
> >  	} __rte_aligned(16);
> > +#endif
> >  	/**< Start of the vector array union. Depending upon the event type the
> >  	 * vector array can be an array of mbufs or pointers or opaque u64
> >  	 * values.
> >  	 */
> > -};
> > +} __rte_aligned(16);
> >  
> >  /* Scheduler type definitions */
> >  #define RTE_SCHED_TYPE_ORDERED          0
> 
> Zero size arrays should be replaced by flexible arrays.
> Linux has this coccinelle script for that:
>
Yes, I agree. However, given how late in the release process I discovered
this, I wanted a fix with absolute minimum impact, which is why I chose the
above. Zero struct change for C code, and enough of a fix for C++ to get it
compiling.
If you feel that replacing with flexible arrays is safe enough to do at
this late stage, we can perhaps consider it, but overall I'd suggest doing
any such replacement in 22.07

/Bruce

  reply	other threads:[~2022-03-14  9:00 UTC|newest]

Thread overview: 9+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-03-11 20:05 [PATCH 0/5] build fixes on FreeBSD Bruce Richardson
2022-03-11 20:05 ` [PATCH 1/5] eal/freebsd: add missing C++ include guards Bruce Richardson
2022-03-11 20:05 ` [PATCH 2/5] compressdev: separate out driver-only headers Bruce Richardson
2022-03-11 20:05 ` [PATCH 3/5] compressdev: fix missing space in header Bruce Richardson
2022-03-11 20:05 ` [PATCH 4/5] cryptodev: fix compilation with clang C++ builds Bruce Richardson
2022-03-11 20:05 ` [PATCH 5/5] eventdev: " Bruce Richardson
2022-03-12  1:11   ` Stephen Hemminger
2022-03-14  9:00     ` Bruce Richardson [this message]
2022-03-15  1:13 ` [PATCH 0/5] build fixes on FreeBSD Thomas Monjalon

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=Yi8EJNikc0mWwOWK@bricha3-MOBL.ger.corp.intel.com \
    --to=bruce.richardson@intel.com \
    --cc=dev@dpdk.org \
    --cc=pbhagavatula@marvell.com \
    --cc=stephen@networkplumber.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).