public inbox for llvm@lists.linux.dev
 help / color / mirror / Atom feed
From: Kuan-Wei Chiu <visitorckw@gmail.com>
To: Nathan Chancellor <nathan@kernel.org>
Cc: kernel test robot <lkp@intel.com>,
	llvm@lists.linux.dev, oe-kbuild-all@lists.linux.dev
Subject: Re: [PATCH v5 1/2] lib/test_bitops: Add benchmark test for fns()
Date: Fri, 3 May 2024 15:31:22 +0800	[thread overview]
Message-ID: <ZjSSylciH+qJeEEG@visitorckw-System-Product-Name> (raw)
In-Reply-To: <20240503041701.GA3660305@thelio-3990X>

On Thu, May 02, 2024 at 09:17:01PM -0700, Nathan Chancellor wrote:
> Hi Kuan-Wei,
> 
> On Fri, May 03, 2024 at 09:34:28AM +0800, Kuan-Wei Chiu wrote:
> > On Fri, May 03, 2024 at 08:49:00AM +0800, kernel test robot wrote:
> > > Hi Kuan-Wei,
> > > 
> > > kernel test robot noticed the following build errors:
> > > 
> > > [auto build test ERROR on linus/master]
> > > [also build test ERROR on v6.9-rc6 next-20240502]
> > > [cannot apply to akpm-mm/mm-everything akpm-mm/mm-nonmm-unstable]
> > > [If your patch is applied to the wrong git tree, kindly drop us a note.
> > > And when submitting patch, we suggest to use '--base' as documented in
> > > https://git-scm.com/docs/git-format-patch#_base_tree_information]
> > > 
> > > url:    https://github.com/intel-lab-lkp/linux/commits/Kuan-Wei-Chiu/lib-test_bitops-Add-benchmark-test-for-fns/20240502-172638
> > > base:   linus/master
> > > patch link:    https://lore.kernel.org/r/20240502092443.6845-2-visitorckw%40gmail.com
> > > patch subject: [PATCH v5 1/2] lib/test_bitops: Add benchmark test for fns()
> > > config: x86_64-allyesconfig (https://download.01.org/0day-ci/archive/20240503/202405030808.UsoMKFNP-lkp@intel.com/config)
> > > compiler: clang version 18.1.4 (https://github.com/llvm/llvm-project e6c3289804a67ea0bb6a86fadbe454dd93b8d855)
> > > reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20240503/202405030808.UsoMKFNP-lkp@intel.com/reproduce)
> > > 
> > > If you fix the issue in a separate patch/commit (i.e. not just a new version of
> > > the same patch/commit), kindly add following tags
> > > | Reported-by: kernel test robot <lkp@intel.com>
> > > | Closes: https://lore.kernel.org/oe-kbuild-all/202405030808.UsoMKFNP-lkp@intel.com/
> > > 
> > > All errors (new ones prefixed by >>):
> > > 
> > > >> lib/test_bitops.c:56:39: error: variable 'tmp' set but not used [-Werror,-Wunused-but-set-variable]
> > >       56 |         static volatile __used unsigned long tmp __initdata;
> > >          |                                              ^
> > >    1 error generated.
> > > 
> > > 
> > > vim +/tmp +56 lib/test_bitops.c
> > > 
> > >     52	
> > >     53	static int __init test_fns(void)
> > >     54	{
> > >     55		static unsigned long buf[10000] __initdata;
> > >   > 56		static volatile __used unsigned long tmp __initdata;
> > 
> > I apologize for causing the compilation failure with clang. I'm not
> > very familiar with clang and I'm not sure why something marked as
> > __used would result in the warning mentioned above. Perhaps clang does
> > not support attribute((used))? Is there a way to work around this
> > issue?
> 
> It looks like __attribute__((__used__)) is not enough to stop clang from
> warning, unlike GCC. I can likely fix that in clang if it is acceptable
> to the clang maintainers (although more below on why this might be
> intentional) but the warning will still need to be resolved for older
> versions. Looking at the current clang source code and tests, it looks
> like __attribute__((__unused__)) should silence the warning, which the
> kernel has available as __always_unused or __maybe_unused, depending on
> the context.
> 
> $ cat test.c
> void foo(void)
> {
>         int a;
>         a = 1;
> }
> 
> void bar(void)
> {
>         static int b;
>         b = 2;
> }
> 
> void baz(void)
> {
>         static int c __attribute__((__used__));
>         c = 3;
> }
> 
> void quux(void)
> {
>         static int d __attribute__((__unused__));
>         d = 4;
> }
> 
> void foobar(void)
> {
>         static int e __attribute__((__used__)) __attribute__((__unused__));
>         e = 1;
> }
> 
> $ gcc -Wunused-but-set-variable -c -o /dev/null test.c
> test.c: In function ‘foo’:
> test.c:3:13: warning: variable ‘a’ set but not used [-Wunused-but-set-variable]
>     3 |         int a;
>       |             ^
> test.c: In function ‘bar’:
> test.c:9:20: warning: variable ‘b’ set but not used [-Wunused-but-set-variable]
>     9 |         static int b;
>       |                    ^
> 
> $ clang -fsyntax-only -Wunused-but-set-variable test.c
> test.c:3:6: warning: variable 'a' set but not used [-Wunused-but-set-variable]
>     3 |         int a;
>       |             ^
> test.c:9:13: warning: variable 'b' set but not used [-Wunused-but-set-variable]
>     9 |         static int b;
>       |                    ^
> test.c:15:13: warning: variable 'c' set but not used [-Wunused-but-set-variable]
>    15 |         static int c __attribute__((__used__));
>       |                    ^
> 3 warnings generated.
> 
> I've attached a diff below that resolves the warning for me and it has
> no code generation differences based on objdump. While having used and
> unused attributes together might look unusual, reading the GCC attribute
> manual makes it seem like these attributes fulfill similar yet different
> roles, __unused__ prevents any unused warnings while __used__ forces the
> variable to be emitted:
> 
> https://gcc.gnu.org/onlinedocs/gcc-13.2.0/gcc/Common-Variable-Attributes.html#index-unused-variable-attribute
> 
> A strict reading of that does not make it seem like __used__ implies
> disabling unused warnings, so I can understand why clang's behavior is
> the way that it is.
> 
Thank you for your explanation and providing the solution. I tested the
diff stat you provided, and it works well for me.

Regards,
Kuan-Wei
> 
> diff --git a/lib/test_bitops.c b/lib/test_bitops.c
> index 5c627b525a48..28c91072cf85 100644
> --- a/lib/test_bitops.c
> +++ b/lib/test_bitops.c
> @@ -53,7 +53,7 @@ static unsigned long order_comb_long[][2] = {
>  static int __init test_fns(void)
>  {
>  	static unsigned long buf[10000] __initdata;
> -	static volatile __used unsigned long tmp __initdata;
> +	static volatile __always_unused __used unsigned long tmp __initdata;
>  	unsigned int i, n;
>  	ktime_t time;
>  

  reply	other threads:[~2024-05-03  7:31 UTC|newest]

Thread overview: 15+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
     [not found] <20240502092443.6845-2-visitorckw@gmail.com>
2024-05-03  0:49 ` [PATCH v5 1/2] lib/test_bitops: Add benchmark test for fns() kernel test robot
2024-05-03  1:34   ` Kuan-Wei Chiu
2024-05-03  4:17     ` Nathan Chancellor
2024-05-03  7:31       ` Kuan-Wei Chiu [this message]
2024-05-03  7:38         ` Kuan-Wei Chiu
2024-05-03 15:54           ` Nathan Chancellor
2024-05-03 21:55             ` Yury Norov
2024-05-03 22:23               ` Nathan Chancellor
2024-05-05 10:42                 ` Miguel Ojeda
2024-05-06 17:52                   ` Nathan Chancellor
2024-05-06 18:08                     ` Miguel Ojeda
2024-05-06 22:47                       ` Yury Norov
2024-05-07 14:19                         ` Nathan Chancellor
2024-05-05 10:42               ` Miguel Ojeda
2024-05-06 17:56                 ` Nathan Chancellor

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=ZjSSylciH+qJeEEG@visitorckw-System-Product-Name \
    --to=visitorckw@gmail.com \
    --cc=lkp@intel.com \
    --cc=llvm@lists.linux.dev \
    --cc=nathan@kernel.org \
    --cc=oe-kbuild-all@lists.linux.dev \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox