From mboxrd@z Thu Jan 1 00:00:00 1970 From: Michael Qiu Subject: [PATCH] examples/ip_pipeline: Fix compile issue with strict-aliasing Date: Wed, 9 Dec 2015 16:44:26 +0800 Message-ID: <1449650666-26067-1-git-send-email-michael.qiu@intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: quoted-printable To: dev@dpdk.org Return-path: Received: from mga02.intel.com (mga02.intel.com [134.134.136.20]) by dpdk.org (Postfix) with ESMTP id AA003569C for ; Wed, 9 Dec 2015 09:44:33 +0100 (CET) List-Id: patches and discussions about DPDK List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org Sender: "dev" Compile ip_pipeline in CentOS 6.5 with kernel 2.6.32-431 GCC 4.4.7, will lead below error: pipeline_routing_be.c: In function =E2=80=98pipeline_routing_msg_req_= arp_add_handler=E2=80=99: pipeline_routing_be.c:1817: error: dereferencing pointer =E2=80=98({a= nonymous})=E2=80=99 does break strict-aliasing rules This because the code break strict-aliasing rule. The patch solve this issue. Fixes: 0ae7275810f1 (examples/ip_pipeline: add more functions to routing = pipeline) Signed-off-by: Michael Qiu --- examples/ip_pipeline/pipeline/pipeline_routing_be.c | 11 ++++------- 1 file changed, 4 insertions(+), 7 deletions(-) diff --git a/examples/ip_pipeline/pipeline/pipeline_routing_be.c b/exampl= es/ip_pipeline/pipeline/pipeline_routing_be.c index 4a95c7d..9baabd0 100644 --- a/examples/ip_pipeline/pipeline/pipeline_routing_be.c +++ b/examples/ip_pipeline/pipeline/pipeline_routing_be.c @@ -1461,8 +1461,7 @@ pipeline_routing_msg_req_route_add_handler(struct p= ipeline *p, void *msg) uint64_t macaddr_dst; uint64_t ethertype =3D ETHER_TYPE_IPv4; =20 - *((struct ether_addr *) &macaddr_dst) =3D - req->data.ethernet.macaddr; + macaddr_dst =3D *((uint64_t *)&(req->data.ethernet.macaddr)); macaddr_dst =3D rte_bswap64(macaddr_dst << 16); =20 entry_arp0.slab[0] =3D @@ -1503,8 +1502,7 @@ pipeline_routing_msg_req_route_add_handler(struct p= ipeline *p, void *msg) uint64_t svlan =3D req->data.l2.qinq.svlan; uint64_t cvlan =3D req->data.l2.qinq.cvlan; =20 - *((struct ether_addr *) &macaddr_dst) =3D - req->data.ethernet.macaddr; + macaddr_dst =3D *((uint64_t *)&(req->data.ethernet.macaddr)); macaddr_dst =3D rte_bswap64(macaddr_dst << 16); =20 entry_arp0.slab[0] =3D rte_bswap64((svlan << 48) | @@ -1563,8 +1561,7 @@ pipeline_routing_msg_req_route_add_handler(struct p= ipeline *p, void *msg) uint64_t label3 =3D req->data.l2.mpls.labels[3]; uint32_t n_labels =3D req->data.l2.mpls.n_labels; =20 - *((struct ether_addr *) &macaddr_dst) =3D - req->data.ethernet.macaddr; + macaddr_dst =3D *((uint64_t *)&(req->data.ethernet.macaddr)); macaddr_dst =3D rte_bswap64(macaddr_dst << 16); =20 switch (n_labels) { @@ -1814,7 +1811,7 @@ pipeline_routing_msg_req_arp_add_handler(struct pip= eline *p, void *msg) return rsp; } =20 - *((struct ether_addr *) &entry.macaddr) =3D req->macaddr; + entry.macaddr =3D *((uint64_t *)&(req->macaddr)); entry.macaddr =3D entry.macaddr << 16; =20 rsp->status =3D rte_pipeline_table_entry_add(p->p, --=20 1.9.3