Received: by 2002:ac0:a581:0:0:0:0:0 with SMTP id m1-v6csp1341158imm; Wed, 20 Jun 2018 16:22:59 -0700 (PDT) X-Google-Smtp-Source: ADUXVKIDCZKwce7FXUyPzD0BhJeMs2QBU3QHqaPGxy8j+ZTj9gDXRvXn1yqFvvomOSFs2MT6y4yq X-Received: by 2002:a62:6141:: with SMTP id v62-v6mr24745684pfb.197.1529536979839; Wed, 20 Jun 2018 16:22:59 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1529536979; cv=none; d=google.com; s=arc-20160816; b=FNA1B+7Hq/LUHAOvN3lL1zFkW2t9N/ykJefzGigEHJ3PbTSPi0cI5hI76JLPZIMmUj SNl0fygJJRDfaJIph9jo3WsHUgdQuVuIN544ZDcMS0xqvB3nMM6MRNawA/nDYFQ/1JYI D7Ht0toXIm1l/hEZKXJsl5MWxOngvqLqaC80P+AOpdSwxRVfsfnRb2H1m7jzL4NcMamO oKaNVq1zBreTdyq74JWMQimACF2M/iHjk8v/EpqFuuWyADqHmwL+TqugleYLciMS3Mkk PpIXpmovPAlK+4PcVcB443RO1EHcbMXutsaTtd8ZDjaklz7NcCllf1rrO12MdD8EF0ki zcvw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:cc:to:subject:message-id:date:from :references:in-reply-to:mime-version:dkim-signature:dkim-filter :arc-authentication-results; bh=BvjvEwsCKwteznCw+J7EKVMYt10HGvefYc/aHObNGQA=; b=CjZs6kAGiX8aTtV3fmH2ArSKqrn5UsWXsCM6K4WAwj9Tq8YHthdVkDCzwuDKEXfhjl hB3CwZ9hNaFLlrW9l0Qhii0W8c0Q5bxa0dbY89kvAKfESbsR5BiiIOARh5CHGWKYY8+V vjH1Ts7VM7Vu0Te60l/SP965xJXKpoPxxcOYNObOSt5MZ5nrcBlV2GPJcvfwKRTEhc+V mhI3XnyBiT/srjvheZlvCMdovJYwXpfyIppmxd/Rh2qkShJHkFXFdug3l5gU79punKAL fgrfPqbutarXvie9vfJ6ZM1LX0tt1lB3xdGpLBP9j7kc8NY1HxvTMuXQMO+KZEkghdIC BGdw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@nifty.com header.s=dec2015msa header.b=1KrV2lRB; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id 9-v6si3313488pla.59.2018.06.20.16.22.44; Wed, 20 Jun 2018 16:22:59 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass header.i=@nifty.com header.s=dec2015msa header.b=1KrV2lRB; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1754309AbeFTXWG (ORCPT + 99 others); Wed, 20 Jun 2018 19:22:06 -0400 Received: from conssluserg-03.nifty.com ([210.131.2.82]:64297 "EHLO conssluserg-03.nifty.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1754139AbeFTXWE (ORCPT ); Wed, 20 Jun 2018 19:22:04 -0400 Received: from mail-vk0-f52.google.com (mail-vk0-f52.google.com [209.85.213.52]) (authenticated) by conssluserg-03.nifty.com with ESMTP id w5KNLgA4003494; Thu, 21 Jun 2018 08:21:43 +0900 DKIM-Filter: OpenDKIM Filter v2.10.3 conssluserg-03.nifty.com w5KNLgA4003494 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=nifty.com; s=dec2015msa; t=1529536903; bh=BvjvEwsCKwteznCw+J7EKVMYt10HGvefYc/aHObNGQA=; h=In-Reply-To:References:From:Date:Subject:To:Cc:From; b=1KrV2lRBZYSAMSAdo1pjeJEBopT2ygXvGHz/lF6BQqU7IXwbSRGERKJHhuQt7QoNn pvIx5PBMXmimnDgRzFuxTnb1oLaMpjqcLfnQIzGG9hSWhW3c0YtVdxJZVNRx9Py3QU NhqscH3BlSy6lAzKFSr/H6zL6u1lzLw0AcED9XaooveWQqf8qFE/49pP19wDFG5Fmn vCLuEJkc55u16zHu1uowh8w/h+jj8efTn/dFditWHT1OVjgqyov3MyqT4L3ucGMxLI yU6mf7Ejw2Q4i8ae1tsy9EidJp9AoZLTlkatDnjvDQ4HRFY6iKfIq1l6oaJSi1J76+ NnX58aw4e1P1A== X-Nifty-SrcIP: [209.85.213.52] Received: by mail-vk0-f52.google.com with SMTP id q135-v6so777389vkh.1; Wed, 20 Jun 2018 16:21:43 -0700 (PDT) X-Gm-Message-State: APt69E3Jom4QZG0LuYiLbnKEnRHu5Xa154wLDXFeaZHsTNXs5TsZqpM4 H7bhLz0XetlOqTGOS6aPmDYLy/Qmj/uq3rpCy/g= X-Received: by 2002:a1f:b143:: with SMTP id a64-v6mr13458964vkf.65.1529536902208; Wed, 20 Jun 2018 16:21:42 -0700 (PDT) MIME-Version: 1.0 Received: by 2002:ab0:1ec1:0:0:0:0:0 with HTTP; Wed, 20 Jun 2018 16:21:01 -0700 (PDT) In-Reply-To: <20180619190225.7eguhiw3ixaiwpgl@pburton-laptop> References: <20180616005323.7938-1-paul.burton@mips.com> <20180616005323.7938-2-paul.burton@mips.com> <20180619190225.7eguhiw3ixaiwpgl@pburton-laptop> From: Masahiro Yamada Date: Thu, 21 Jun 2018 08:21:01 +0900 X-Gmail-Original-Message-ID: Message-ID: Subject: Re: [PATCH 1/3] kbuild: add macro for controlling warnings to linux/compiler.h To: Paul Burton Cc: Arnd Bergmann , Linux Kbuild mailing list , Mauro Carvalho Chehab , Linux-MIPS , Ingo Molnar , Matthew Wilcox , Thomas Gleixner , Douglas Anderson , Josh Poimboeuf , Andrew Morton , Matthias Kaehlcke , He Zhe , Benjamin Herrenschmidt , Michal Marek , Khem Raj , Christophe Leroy , Al Viro , Stafford Horne , Gideon Israel Dsouza , Kees Cook , Michael Ellerman , Heiko Carstens , Linux Kernel Mailing List , Paul Mackerras , linuxppc-dev Content-Type: text/plain; charset="UTF-8" Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org 2018-06-20 4:02 GMT+09:00 Paul Burton : > Hi Masahiro, > > On Wed, Jun 20, 2018 at 02:34:35AM +0900, Masahiro Yamada wrote: >> 2018-06-16 9:53 GMT+09:00 Paul Burton : >> > diff --git a/include/linux/compiler-gcc.h b/include/linux/compiler-gcc.h >> > index f1a7492a5cc8..aba64a2912d8 100644 >> > --- a/include/linux/compiler-gcc.h >> > +++ b/include/linux/compiler-gcc.h >> > @@ -347,3 +347,69 @@ >> > #if GCC_VERSION >= 50100 >> > #define COMPILER_HAS_GENERIC_BUILTIN_OVERFLOW 1 >> > #endif >> > + >> > +/* >> > + * turn individual warnings and errors on and off locally, depending >> > + * on version. >> > + */ >> > +#define __diag_GCC(version, s) __diag_GCC_ ## version(s) >> > + >> > +#if GCC_VERSION >= 40600 >> > +#define __diag_str1(s) #s >> > +#define __diag_str(s) __diag_str1(s) >> > +#define __diag(s) _Pragma(__diag_str(GCC diagnostic s)) >> > + >> > +/* compilers before gcc-4.6 do not understand "#pragma GCC diagnostic push" */ >> > +#define __diag_GCC_4_6(s) __diag(s) >> > +#else >> > +#define __diag(s) >> > +#define __diag_GCC_4_6(s) >> > +#endif >> > + >> > +#if GCC_VERSION >= 40700 >> > +#define __diag_GCC_4_7(s) __diag(s) >> > +#else >> > +#define __diag_GCC_4_7(s) >> > +#endif >> > + >> > +#if GCC_VERSION >= 40800 >> > +#define __diag_GCC_4_8(s) __diag(s) >> > +#else >> > +#define __diag_GCC_4_8(s) >> > +#endif >> > + >> > +#if GCC_VERSION >= 40900 >> > +#define __diag_GCC_4_9(s) __diag(s) >> > +#else >> > +#define __diag_GCC_4_9(s) >> > +#endif >> > + >> > +#if GCC_VERSION >= 50000 >> > +#define __diag_GCC_5(s) __diag(s) >> > +#else >> > +#define __diag_GCC_5(s) >> > +#endif >> > + >> > +#if GCC_VERSION >= 60000 >> > +#define __diag_GCC_6(s) __diag(s) >> > +#else >> > +#define __diag_GCC_6(s) >> > +#endif >> > + >> > +#if GCC_VERSION >= 70000 >> > +#define __diag_GCC_7(s) __diag(s) >> > +#else >> > +#define __diag_GCC_7(s) >> > +#endif >> > + >> > +#if GCC_VERSION >= 80000 >> > +#define __diag_GCC_8(s) __diag(s) >> > +#else >> > +#define __diag_GCC_8(s) >> > +#endif >> > + >> > +#if GCC_VERSION >= 90000 >> > +#define __diag_GCC_9(s) __diag(s) >> > +#else >> > +#define __diag_GCC_9(s) >> > +#endif >> >> >> Hmm, we would have to add this for every release. > > Well, strictly speaking only ones that we need to modify diags for - ie. > in this series we could get away with only adding the GCC 8 macro if we > wanted. > >> > diff --git a/include/linux/compiler_types.h b/include/linux/compiler_types.h >> > index 6b79a9bba9a7..313a2ad884e0 100644 >> > --- a/include/linux/compiler_types.h >> > +++ b/include/linux/compiler_types.h >> > @@ -271,4 +271,22 @@ struct ftrace_likely_data { >> > # define __native_word(t) (sizeof(t) == sizeof(char) || sizeof(t) == sizeof(short) || sizeof(t) == sizeof(int) || sizeof(t) == sizeof(long)) >> > #endif >> > >> > +#ifndef __diag >> > +#define __diag(string) >> > +#endif >> > + >> > +#ifndef __diag_GCC >> > +#define __diag_GCC(string) >> > +#endif >> >> __diag_GCC() takes two arguments, >> so it should be: >> >> #ifndef __diag_GCC >> #define __diag_GCC(version, s) >> #endif >> >> >> Otherwise, this would cause warning like this: >> >> >> arch/arm64/kernel/sys.c:40:1: error: macro "__diag_GCC" passed 2 >> arguments, but takes just 1 >> SYSCALL_DEFINE1(arm64_personality, unsigned int, personality) >> ^~~~~~~~~~ > > Yes, good catch. > >> > +#define __diag_push() __diag(push) >> > +#define __diag_pop() __diag(pop) >> > + >> > +#define __diag_ignore(compiler, version, option, comment) \ >> > + __diag_ ## compiler(version, ignored option) >> > +#define __diag_warn(compiler, version, option, comment) \ >> > + __diag_ ## compiler(version, warning option) >> > +#define __diag_error(compiler, version, option, comment) \ >> > + __diag_ ## compiler(version, error option) >> > + >> >> To me, it looks like this is putting GCC/Clang specific things >> in the common file, . >> >> All compilers must use "ignored", "warning", "error", >> not allowed to use "ignore". > > We could move that to linux/compiler-gcc.h pretty easily. > >> I also wonder if we could avoid proliferating __diag_GCC_*. > > My thought is that it's unlikely we'll ever support enough different > compilers for it to become problematic to list the ones we modify > warnings for in linux/compiler_types.h. > >> I attached a bit different implementation below. >> >> I used -Wno-pragmas to avoid unknown option warnings. > > That doesn't seem very clean to me because it will hide typos or other > mistakes. One advantage of Arnd's patch is that by specifying the > compiler & version we only attempt to use pragmas that are appropriate > so we don't need to ignore unknown ones. > >> Usage is >> >> __diag_push(); >> __diag_ignore(-Wattribute-alias, >> "Type aliasing is used to sanitize syscall arguments"); >> ... >> __diag_pop(); >> >> Comments, ideas are appreciated. > > By removing the compiler & version arguments you're enforcing that if we > ignore a warning for one compiler we must ignore it for all, regardless > of whether it's problematic. This essentially presumes that warnings > with the same name will behave the same across compilers, which feels > worse to me than having users of this explicitly state which compilers > need the pragmas. Fair enough. V2 is good except one nit. (I left a comment in it) I can fix it up locally if it is tedious to re-spin, though. > Thanks, > Paul > -- > To unsubscribe from this list: send the line "unsubscribe linux-kbuild" in > the body of a message to majordomo@vger.kernel.org > More majordomo info at http://vger.kernel.org/majordomo-info.html -- Best Regards Masahiro Yamada