[dpdk-dev] [PATCH] cryptodev: fix compilation error in SUSE 11 SP2

De Lara Guarch, Pablo pablo.de.lara.guarch at intel.com
Thu Sep 29 21:30:31 CEST 2016



> -----Original Message-----
> From: Adrien Mazarguil [mailto:adrien.mazarguil at 6wind.com]
> Sent: Tuesday, September 27, 2016 12:45 AM
> To: De Lara Guarch, Pablo
> Cc: dev at dpdk.org; Doherty, Declan
> Subject: Re: [PATCH] cryptodev: fix compilation error in SUSE 11 SP2
> 
> On Mon, Sep 26, 2016 at 10:50:35PM +0100, Pablo de Lara wrote:
> > This commit fixes following build error, which happens in SUSE 11 SP2,
> > with gcc 4.5.1:
> >
> > In file included from lib/librte_cryptodev/rte_cryptodev.c:71:0:
> > lib/librte_cryptodev/rte_cryptodev_pmd.h:76:7:
> > error: flexible array member in otherwise empty struct
> >
> > Fixes: 347a1e037fd3 ("lib: use C99 syntax for zero-size arrays")
> >
> > Signed-off-by: Pablo de Lara <pablo.de.lara.guarch at intel.com>
> 
> Hmm, this error message does not seem related to your patch. Assuming a
> similar error is caused by the original code, I think there is a more
> important issue as the struct should not be empty. Can you check the
> error?

Well, I don't really understand what is the difference between array[] and array[0],
I thought both were the same, but some compilers only accept the latter.
In any case, the struct will not be empty, as there are other fields, that are not variable sized.

I saw that in your patch you made these two changes (among others):

diff --git a/lib/librte_cryptodev/rte_cryptodev.h b/lib/librte_cryptodev/rte_cryptodev.h
index affbdec..1e30a19 100644
--- a/lib/librte_cryptodev/rte_cryptodev.h
+++ b/lib/librte_cryptodev/rte_cryptodev.h
@@ -759,7 +759,7 @@ struct rte_cryptodev_sym_session {
        } __rte_aligned(8);
        /**< Public symmetric session details */

-       char _private[0];
+       char _private[];
        /**< Private session material */
 };

diff --git a/lib/librte_cryptodev/rte_cryptodev_pmd.h b/lib/librte_cryptodev/rte_cryptodev_pmd.h
index 7d049ea..42e7b79 100644
--- a/lib/librte_cryptodev/rte_cryptodev_pmd.h
+++ b/lib/librte_cryptodev/rte_cryptodev_pmd.h
@@ -71,7 +71,7 @@ struct rte_cryptodev_session {
                struct rte_mempool *mp;
        } __rte_aligned(8);

-       char _private[0];
+       __extension__ char _private[0];
 };

So I would expect the same change in both, as they are almost identical,
but you took different approaches (do you know why? I would like to know :))

Basically, I noticed that gcc 4.5 doesn't complain when using your second approach,
that's why I changed it.

Thanks,
Pablo


More information about the dev mailing list