On Wed, Nov 22, 2017 at 08:56:14AM -0500, Neil Horman wrote: > On Wed, Nov 22, 2017 at 09:10:17AM +0100, Nelio Laranjeiro wrote: > > /root/dpdk/x86_64-native-linuxapp-gcc/include/rte_crypto.h:126:28: error: > > ISO C forbids zero-size array ‘sym’ [-Werror=pedantic] > > struct rte_crypto_sym_op sym[0]; > > ^~~ > > > > Fixes: d2a4223c4c6d ("cryptodev: do not store pointer to op specific > > params") > > Cc: pablo.de.lara.gua...@intel.com > > Cc: sta...@dpdk.org > > > > Signed-off-by: Nelio Laranjeiro <nelio.laranje...@6wind.com> > > --- > > lib/librte_cryptodev/rte_crypto.h | 2 +- > > 1 file changed, 1 insertion(+), 1 deletion(-) > > > > diff --git a/lib/librte_cryptodev/rte_crypto.h > > b/lib/librte_cryptodev/rte_crypto.h > > index 3d672fe7d..dc6e91d1d 100644 > > --- a/lib/librte_cryptodev/rte_crypto.h > > +++ b/lib/librte_cryptodev/rte_crypto.h > > @@ -123,7 +123,7 @@ struct rte_crypto_op { > > > > RTE_STD_C11 > > union { > > - struct rte_crypto_sym_op sym[0]; > > + struct rte_crypto_sym_op *sym; > > /**< Symmetric operation parameters */ > > }; /**< operation specific parameters */ > > }; > > -- > > 2.11.0 > > > > > As Laura notes, this isn't the right solution. In addition to adding a 64 bit > pointer, it I think also results in incorrect semantics. That is to say, the > allocation path for this structure allocates the rte_crypto_op and additional > memory for the sym array contiguously, which the sym[0] syntax correctly > interprets to mean the storage for the array is inline with the structure. > Changing to a pointer means you are using the first elements of the array > storage as your pointer, which could be filled with any old value, leading to > corruption. > > If you can't use zero length array semantics (which I assume you cant, as I > don't think clang supports that), a better soution might be to remove the sym > variable entirely, and replace it with a macro that access the sym array as an > offset from the start of the pointer. That would seem to be an ABI change, > but > if you went through that process you would wind up with the same sized struct, > which would be nice > > Neil >
ISO C forbids zero-size arrays, but ISO C99 allows flexible arrays. Why is this symbole within a union? Why not remove the union, change sym[0] to sym[]? -- Gaëtan Rivet 6WIND