From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1756945AbdEDTui (ORCPT ); Thu, 4 May 2017 15:50:38 -0400 Received: from mail-pf0-f176.google.com ([209.85.192.176]:35179 "EHLO mail-pf0-f176.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1756876AbdEDTug (ORCPT ); Thu, 4 May 2017 15:50:36 -0400 Date: Thu, 4 May 2017 12:50:34 -0700 From: Matthias Kaehlcke To: Masahiro Yamada Cc: Michal Marek , Linux Kbuild mailing list , Linux Kernel Mailing List , Grant Grundler , Greg Hackmann , Michael Davidson , masahiroy@kernel.org Subject: Re: [PATCH 2/2] kbuild: clang: Disable the 'duplicate-decl-specifier' warning Message-ID: <20170504195034.GZ128305@google.com> References: <20170421213931.155210-1-mka@chromium.org> <20170421213931.155210-3-mka@chromium.org> MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Disposition: inline In-Reply-To: User-Agent: Mutt/1.5.21 (2010-09-15) Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Hi Masahiro, El Sun, Apr 30, 2017 at 11:01:11PM +0900 Masahiro Yamada ha dit: > 2017-04-22 6:39 GMT+09:00 Matthias Kaehlcke : > > clang generates plenty of these warnings in different parts of the code. > > They are mostly caused by container_of() and other macros which declare > > a "const *" variable for their internal use which triggers a > > "duplicate 'const' specifier" warning if the is already const > > qualified. > > > > Wording-mostly-from: Michael Davidson > > Signed-off-by: Matthias Kaehlcke > > > > I think container_of() can be more simple, > dropping the 'const'. > > The following patch worked for me. > > > diff --git a/include/linux/kernel.h b/include/linux/kernel.h > index 4c26dc3..d53672b 100644 > --- a/include/linux/kernel.h > +++ b/include/linux/kernel.h > @@ -846,11 +846,9 @@ static inline void ftrace_dump(enum > ftrace_dump_mode oops_dump_mode) { } > * @ptr: the pointer to the member. > * @type: the type of the container struct this is embedded in. > * @member: the name of the member within the struct. > - * > */ > #define container_of(ptr, type, member) ({ \ > - const typeof( ((type *)0)->member ) *__mptr = (ptr); \ > - (type *)( (char *)__mptr - offsetof(type,member) );}) > + (type *)((void *)(ptr) - offsetof(type, member));}) > > /* Rebuild everything on CONFIG_FTRACE_MCOUNT_RECORD */ > #ifdef CONFIG_FTRACE_MCOUNT_RECORD Thanks, this eliminates indeed a huge amount of these warnings. The other big source of warnings is MODULE_DEVICE_TABLE which declares a const alias of a type that in most cases is already const. One possible solution would be to remove the 'additional' const qualifier, which might leave some tables non-const. Another option could be some hackery to suppress the warning just for the macro. Not sure if any of this would be acceptable. > For also this one, > I'd like to try to fix the code rather than hiding warnings. I totally agree with the general approach. My clang kernel builds started with plenty of warnings disabled. I fixed the code for most of them until I was left with these two extremely noisy ones, for which I didn't see a clear path. Cheers Matthias