[dpdk-dev,PATCHv2] headers: typeof -> __typeof__ to unbreak C++11 code

Message ID 1425657587-23516-1-git-send-email-konstantin.ananyev@intel.com (mailing list archive)
State Accepted, archived
Headers

Commit Message

Ananyev, Konstantin March 6, 2015, 3:59 p.m. UTC
  v2:
Instead of changing all the affected files,
define 'typeofi' and 'asm' if needed.

When compiling C++11-code or above (--std=c++11), the build fails with
lots of

  rte_eth_ctrl.h:517:3: note: in expansion of macro RTE_ALIGN
    (RTE_ALIGN(RTE_ETH_FLOW_MAX, UINT32_BIT)/UINT32_BIT)
    ^

When reading the GCC info pages, I get the feeling that __typeof__ is
a better choice, and that indeed works when including the headers in
C++ files (--std=c++11).

There are some typeof()s left in C files, the patch only touches the
public API.

Signed-off-by: Simon Kagstrom <simon.kagstrom@netinsight.net>
Signed-off-by: Konstantin Ananyev <konstantin.ananyev@intel.com>
---
 lib/librte_eal/common/include/rte_common.h | 9 +++++++++
 1 file changed, 9 insertions(+)
  

Comments

Thomas Monjalon March 9, 2015, 4:38 p.m. UTC | #1
2015-03-06 15:59, Konstantin Ananyev:
> v2:
> Instead of changing all the affected files,
> define 'typeofi' and 'asm' if needed.
> 
> When compiling C++11-code or above (--std=c++11), the build fails with
> lots of
> 
>   rte_eth_ctrl.h:517:3: note: in expansion of macro RTE_ALIGN
>     (RTE_ALIGN(RTE_ETH_FLOW_MAX, UINT32_BIT)/UINT32_BIT)
>     ^
> 
> When reading the GCC info pages, I get the feeling that __typeof__ is
> a better choice, and that indeed works when including the headers in
> C++ files (--std=c++11).
> 
> There are some typeof()s left in C files, the patch only touches the
> public API.
> 
> Signed-off-by: Simon Kagstrom <simon.kagstrom@netinsight.net>
> Signed-off-by: Konstantin Ananyev <konstantin.ananyev@intel.com>

Applied, thanks
  

Patch

diff --git a/lib/librte_eal/common/include/rte_common.h b/lib/librte_eal/common/include/rte_common.h
index 8ac940c..1867692 100644
--- a/lib/librte_eal/common/include/rte_common.h
+++ b/lib/librte_eal/common/include/rte_common.h
@@ -51,6 +51,15 @@  extern "C" {
 #include <errno.h>
 #include <limits.h>
 
+#ifndef typeof
+#define typeof __typeof__
+#endif
+
+#ifndef asm
+#define asm __asm__
+#endif
+
+
 /*********** Macros to eliminate unused variable warnings ********/
 
 /**