From mboxrd@z Thu Jan 1 00:00:00 1970 From: Adrien Mazarguil Subject: Re: mlx debug build error with clang Date: Fri, 16 Jun 2017 14:19:22 +0200 Message-ID: <20170616121922.GC1758@6wind.com> References: <2f049b66-c76a-9ff8-20c2-df2c25957f59@intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Cc: Nelio Laranjeiro , DPDK To: Ferruh Yigit Return-path: Received: from mail-wm0-f42.google.com (mail-wm0-f42.google.com [74.125.82.42]) by dpdk.org (Postfix) with ESMTP id 000432BD1 for ; Fri, 16 Jun 2017 14:19:30 +0200 (CEST) Received: by mail-wm0-f42.google.com with SMTP id u195so10459037wmd.1 for ; Fri, 16 Jun 2017 05:19:30 -0700 (PDT) Content-Disposition: inline In-Reply-To: <2f049b66-c76a-9ff8-20c2-df2c25957f59@intel.com> List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org Sender: "dev" Hi Ferruh, On Tue, Jun 13, 2017 at 04:32:03PM +0100, Ferruh Yigit wrote: > Hi Adrien, Nelio, > > I am getting following build error [1] with clang [2] when debug enabled > for mlx4 and mlx5. > > This started after I update my box, not sure what triggered this. > Can you please help fixing this? > > Thanks, > ferruh > > > [1] > > .../drivers/net/mlx4/mlx4_flow.c:731:3: error: use of GNU statement > expression extension [-Werror,-Wgnu-statement-expression] > claim_zero(ibv_destroy_qp(fdq->qp)); > ^ > .../drivers/net/mlx4/mlx4.h:185:25: note: expanded from macro 'claim_zero' > #define claim_zero(...) assert((__VA_ARGS__) == 0) > ^ > /usr/include/assert.h:95:6: note: expanded from macro 'assert' > ({ \ > ^ > > .... > > .../drivers/net/mlx5/mlx5_fdir.c:278:2: error: use of GNU statement > expression extension [-Werror,-Wgnu-statement-expression] > assert(((uint8_t *)attr + sizeof(*attr)) == (uint8_t *)spec_offset); > ^ > /usr/include/assert.h:95:6: note: expanded from macro 'assert' > ({ \ > ^ > > [Many of similar ...] > > > [2] > target: x86_64-native-linuxapp-clang > > clang version 4.0.0 (tags/RELEASE_400/final) Recent Glibc versions now apparently handle assert() through a nonstandard ({ }) construct, which is not pedantic-safe due to a missing __extension__ keyword. assert.h still provides a standard assert() definition that shouldn't cause compilation to fail when the following condition is met: #if !defined __GNUC__ || defined __STRICT_ANSI__ However __GNUC__ is (always?) defined by clang for maximum compatibility with GCC while __STRICT_ANSI__ is not due to the -std=gnu99 parameter, assert.h thinks it's OK to use a ({ }) construct but is then caught by clang's -pedantic parameter. There are two ways to address this issue while keeping our beloved -pedantic parameter in debug mode: 1. Replacing -std=gnu99 with -std=c99 (which is even stricter) to bring back __STRICT_ANSI__. 2. Replacing assert() statements with RTE_ASSERT(). The former should be doable now that DPDK includes have been cleaned up, and we're thinking about doing the latter at some point. Since I don't have a recent Glibc handy, can you try replacing -std=gnu99 with -std=c99 in both Makefiles (mlx4 and mlx5), and report how GCC and clang fare? (GCC at least seems to have no problem with that on my side) -- Adrien Mazarguil 6WIND