All of lore.kernel.org
 help / color / mirror / Atom feed
From: Nathan Chancellor <nathan@kernel.org>
To: Kuan-Wei Chiu <visitorckw@gmail.com>
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: Thu, 2 May 2024 21:17:01 -0700	[thread overview]
Message-ID: <20240503041701.GA3660305@thelio-3990X> (raw)
In-Reply-To: <ZjQ/JOpcdgWZXo0y@visitorckw-System-Product-Name>

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.

Cheers,
Nathan

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  4:17 UTC|newest]

Thread overview: 19+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2024-05-02  9:24 [PATCH v5 0/2] bitops: Optimize fns() for improved performance Kuan-Wei Chiu
2024-05-02  9:24 ` [PATCH v5 1/2] lib/test_bitops: Add benchmark test for fns() Kuan-Wei Chiu
2024-05-03  0:49   ` kernel test robot
2024-05-03  1:34     ` Kuan-Wei Chiu
2024-05-03  4:17       ` Nathan Chancellor [this message]
2024-05-03  7:31         ` Kuan-Wei Chiu
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
2024-05-02  9:24 ` [PATCH v5 2/2] bitops: Optimize fns() for improved performance Kuan-Wei Chiu
2024-05-02 14:55 ` [PATCH v5 0/2] " Yury Norov

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=20240503041701.GA3660305@thelio-3990X \
    --to=nathan@kernel.org \
    --cc=lkp@intel.com \
    --cc=llvm@lists.linux.dev \
    --cc=oe-kbuild-all@lists.linux.dev \
    --cc=visitorckw@gmail.com \
    /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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.