[dpdk-dev] Minor C++11 compilation fix for rte_pci.h

Message ID CACKs7VAXEvPy1qJi5nNTwO_gQcHifxcu1wBWo0Lqr_hZRj=iBA@mail.gmail.com (mailing list archive)
State Superseded, archived
Headers

Commit Message

Stefan Puiu Feb. 11, 2015, 8:50 a.m. UTC
  In C++11 concatenated string literals need to have a space in between.
clang 3.4 reports this as an error (and IIRC also gcc-4.8):

dpdk/include/rte_pci.h:96:26: error: invalid suffix on literal; C++11
requires a space between literal and identifier
[-Wreserved-user-defined-literal]

Signed-off-by: Stefan Puiu <stefan.puiu@gmail.com>
---
 lib/librte_eal/common/include/rte_pci.h |    4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

 #define PCI_FMT_NVAL 4
  

Comments

John McNamara Feb. 13, 2015, 8:25 a.m. UTC | #1
> -----Original Message-----

> From: dev [mailto:dev-bounces@dpdk.org] On Behalf Of Stefan Puiu

> Sent: Wednesday, February 11, 2015 8:51 AM

> To: dev@dpdk.org

> Subject: [dpdk-dev] [PATCH] Minor C++11 compilation fix for rte_pci.h

> 

> In C++11 concatenated string literals need to have a space in between.

> clang 3.4 reports this as an error (and IIRC also gcc-4.8):

> 

> dpdk/include/rte_pci.h:96:26: error: invalid suffix on literal; C++11

> requires a space between literal and identifier [-Wreserved-user-defined-

> literal]


Hi Stefan,

That concatenated string literal with PRI* is used in 65 files in the DPDK source. Is that the only compilation error that you got?

John
  
Bruce Richardson Feb. 13, 2015, 10:17 a.m. UTC | #2
On Fri, Feb 13, 2015 at 08:25:38AM +0000, Mcnamara, John wrote:
> > -----Original Message-----
> > From: dev [mailto:dev-bounces@dpdk.org] On Behalf Of Stefan Puiu
> > Sent: Wednesday, February 11, 2015 8:51 AM
> > To: dev@dpdk.org
> > Subject: [dpdk-dev] [PATCH] Minor C++11 compilation fix for rte_pci.h
> > 
> > In C++11 concatenated string literals need to have a space in between.
> > clang 3.4 reports this as an error (and IIRC also gcc-4.8):
> > 
> > dpdk/include/rte_pci.h:96:26: error: invalid suffix on literal; C++11
> > requires a space between literal and identifier [-Wreserved-user-defined-
> > literal]
> 
> Hi Stefan,
> 
> That concatenated string literal with PRI* is used in 65 files in the DPDK source. Is that the only compilation error that you got?
> 
> John

It should only be a problem in header files. The C files for DPDK source are
always to be compiled up with a C compiler - only the headers get included in
application C++ code.

/Bruce
  
John McNamara Feb. 13, 2015, 10:27 a.m. UTC | #3
> -----Original Message-----
> From: Richardson, Bruce
> Sent: Friday, February 13, 2015 10:18 AM
> To: Mcnamara, John
> Cc: Stefan Puiu; dev@dpdk.org
> Subject: Re: [dpdk-dev] [PATCH] Minor C++11 compilation fix for rte_pci.h
> 
> > >
> > > In C++11 concatenated string literals need to have a space in between.
> > > clang 3.4 reports this as an error (and IIRC also gcc-4.8):
> > >
> > > dpdk/include/rte_pci.h:96:26: error: invalid suffix on literal;
> > > C++11 requires a space between literal and identifier
> > > [-Wreserved-user-defined- literal]
> >
> >
> > That concatenated string literal with PRI* is used in 65 files in the
> DPDK source. Is that the only compilation error that you got?
> >
> > John
> 
> It should only be a problem in header files. The C files for DPDK source
> are always to be compiled up with a C compiler - only the headers get
> included in application C++ code.
> 

Hi,

In that case it only occurs in 3 header files. I guess that patch should be extended to include those as well:

    $ find lib  -name \*.h | xargs grep -l '"PRI'
    lib/librte_vhost/vhost-net-cdev.h
    lib/librte_eal/common/include/rte_pci.h
    lib/librte_mempool/rte_mempool.h

John.
--
  
Stefan Puiu Feb. 20, 2015, 12:26 p.m. UTC | #4
Hi and thanks for reviewing,

I seem to have somehow missed the email for this one and thought it
got lost. Sorry.

On Fri, Feb 13, 2015 at 12:27 PM, Mcnamara, John
<john.mcnamara@intel.com> wrote:
>> -----Original Message-----
>> From: Richardson, Bruce
>> Sent: Friday, February 13, 2015 10:18 AM
>> To: Mcnamara, John
>> Cc: Stefan Puiu; dev@dpdk.org
>> Subject: Re: [dpdk-dev] [PATCH] Minor C++11 compilation fix for rte_pci.h
>>
>> > >
>> > > In C++11 concatenated string literals need to have a space in between.
>> > > clang 3.4 reports this as an error (and IIRC also gcc-4.8):
>> > >
>> > > dpdk/include/rte_pci.h:96:26: error: invalid suffix on literal;
>> > > C++11 requires a space between literal and identifier
>> > > [-Wreserved-user-defined- literal]
>> >
>> >
>> > That concatenated string literal with PRI* is used in 65 files in the
>> DPDK source. Is that the only compilation error that you got?
>> >
>> > John
>>
>> It should only be a problem in header files. The C files for DPDK source
>> are always to be compiled up with a C compiler - only the headers get
>> included in application C++ code.
>>
>
> Hi,
>
> In that case it only occurs in 3 header files. I guess that patch should be extended to include those as well:
>
>     $ find lib  -name \*.h | xargs grep -l '"PRI'
>     lib/librte_vhost/vhost-net-cdev.h
>     lib/librte_eal/common/include/rte_pci.h
>     lib/librte_mempool/rte_mempool.h

Makes sense. Bruce is right, I'm only including headers from C++, the
library is compiled using C.

It seems I didn't hit the rte_mempool.h because (at least in 1.8.0)
that the usage of PRI* is under #ifdef RTE_LIBRTE_MEMPOOL_DEBUG. It's
very likely I didn't need the first file in the list.

Anyway, I'll send a new version.

>
> John.
> --
>
>
>
>
  

Patch

diff --git a/lib/librte_eal/common/include/rte_pci.h
b/lib/librte_eal/common/include/rte_pci.h
index 66ed793..12ae5a7 100644
--- a/lib/librte_eal/common/include/rte_pci.h
+++ b/lib/librte_eal/common/include/rte_pci.h
@@ -93,10 +93,10 @@  extern struct pci_device_list pci_device_list;
/**< Global list of PCI devices.
 #define SYSFS_PCI_DEVICES "/sys/bus/pci/devices"

 /** Formatting string for PCI device identifier: Ex: 0000:00:01.0 */
-#define PCI_PRI_FMT "%.4"PRIx16":%.2"PRIx8":%.2"PRIx8".%"PRIx8
+#define PCI_PRI_FMT "%.4" PRIx16 ":%.2" PRIx8 ":%.2" PRIx8 ".%" PRIx8

 /** Short formatting string, without domain, for PCI device: Ex: 00:01.0 */
-#define PCI_SHORT_PRI_FMT "%.2"PRIx8":%.2"PRIx8".%"PRIx8
+#define PCI_SHORT_PRI_FMT "%.2" PRIx8 ":%.2" PRIx8 ".%" PRIx8

 /** Nb. of values in PCI device identifier format string. */