2024-05-31 20:10:35

by John Hubbard

[permalink] [raw]
Subject: [PATCH v3 0/3] selftests/futex: clang-inspired fixes

Hi,

Here's a few fixes that are part of my effort to get all selftests
building cleanly under clang. Plus one that I noticed by inspection.

Changes since v2:

1) Added a sentence to the .PHONY patch, to show that it is removing
duplicate code.

2) Added the actual clang warning output to the commit description.

Changes since the first version:

1) Rebased onto Linux 6.10-rc1
2) Added Reviewed-by's.

...and it turns out that all three patches are still required, on -rc1,
in order to get a clean clang build.

Enjoy!

thanks,
John Hubbard

John Hubbard (3):
selftests/futex: don't redefine .PHONY targets (all, clean)
selftests/futex: don't pass a const char* to asprintf(3)
selftests/futex: pass _GNU_SOURCE without a value to the compiler

tools/testing/selftests/futex/Makefile | 2 --
tools/testing/selftests/futex/functional/Makefile | 2 +-
tools/testing/selftests/futex/functional/futex_requeue_pi.c | 2 +-
3 files changed, 2 insertions(+), 4 deletions(-)


base-commit: b050496579632f86ee1ef7e7501906db579f3457
--
2.45.1



2024-05-31 20:10:43

by John Hubbard

[permalink] [raw]
Subject: [PATCH v3 2/3] selftests/futex: don't pass a const char* to asprintf(3)

When building with clang, via:

make LLVM=1 -C tools/testing/selftests

...clang issues this warning:

futex_requeue_pi.c:403:17: warning: passing 'const char **' to parameter
of type 'char **' discards qualifiers in nested pointer types
[-Wincompatible-pointer-types-discards-qualifiers]

This warning fires because test_name is passed into asprintf(3), which
then changes it.

Fix this by simply removing the const qualifier. This is a local
automatic variable in a very short function, so there is not much need
to use the compiler to enforce const-ness at this scope.

[1] https://lore.kernel.org/all/20240329-selftests-libmk-llvm-rfc-v1-1-2f9ed7d1c49f@valentinobst.de/

Fixes: f17d8a87ecb5 ("selftests: fuxex: Report a unique test name per run of futex_requeue_pi")
Reviewed-by: Davidlohr Bueso <[email protected]>
Signed-off-by: John Hubbard <[email protected]>
---
tools/testing/selftests/futex/functional/futex_requeue_pi.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/tools/testing/selftests/futex/functional/futex_requeue_pi.c b/tools/testing/selftests/futex/functional/futex_requeue_pi.c
index 7f3ca5c78df1..215c6cb539b4 100644
--- a/tools/testing/selftests/futex/functional/futex_requeue_pi.c
+++ b/tools/testing/selftests/futex/functional/futex_requeue_pi.c
@@ -360,7 +360,7 @@ int unit_test(int broadcast, long lock, int third_party_owner, long timeout_ns)

int main(int argc, char *argv[])
{
- const char *test_name;
+ char *test_name;
int c, ret;

while ((c = getopt(argc, argv, "bchlot:v:")) != -1) {
--
2.45.1


2024-05-31 20:11:01

by John Hubbard

[permalink] [raw]
Subject: [PATCH v3 3/3] selftests/futex: pass _GNU_SOURCE without a value to the compiler

It's slightly better to set _GNU_SOURCE in the source code, but if one
must do it via the compiler invocation, then the best way to do so is
this:

$(CC) -D_GNU_SOURCE=

...because otherwise, if this form is used:

$(CC) -D_GNU_SOURCE

...then that leads the compiler to set a value, as if you had passed in:

$(CC) -D_GNU_SOURCE=1

That, in turn, leads to warnings under both gcc and clang, like this:

futex_requeue_pi.c:20: warning: "_GNU_SOURCE" redefined

Fix this by using the "-D_GNU_SOURCE=" form.

Reviewed-by: Edward Liaw <[email protected]>
Reviewed-by: Davidlohr Bueso <[email protected]>
Signed-off-by: John Hubbard <[email protected]>
---
tools/testing/selftests/futex/functional/Makefile | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/tools/testing/selftests/futex/functional/Makefile b/tools/testing/selftests/futex/functional/Makefile
index a392d0917b4e..994fa3468f17 100644
--- a/tools/testing/selftests/futex/functional/Makefile
+++ b/tools/testing/selftests/futex/functional/Makefile
@@ -1,6 +1,6 @@
# SPDX-License-Identifier: GPL-2.0
INCLUDES := -I../include -I../../ $(KHDR_INCLUDES)
-CFLAGS := $(CFLAGS) -g -O2 -Wall -D_GNU_SOURCE -pthread $(INCLUDES) $(KHDR_INCLUDES)
+CFLAGS := $(CFLAGS) -g -O2 -Wall -D_GNU_SOURCE= -pthread $(INCLUDES) $(KHDR_INCLUDES)
LDLIBS := -lpthread -lrt

LOCAL_HDRS := \
--
2.45.1


2024-05-31 20:39:52

by Shuah Khan

[permalink] [raw]
Subject: Re: [PATCH v3 0/3] selftests/futex: clang-inspired fixes

On 5/31/24 14:07, John Hubbard wrote:
> Hi,
>
> Here's a few fixes that are part of my effort to get all selftests
> building cleanly under clang. Plus one that I noticed by inspection.
>
> Changes since v2:
>
> 1) Added a sentence to the .PHONY patch, to show that it is removing
> duplicate code.
>
> 2) Added the actual clang warning output to the commit description.
>
> Changes since the first version:
>
> 1) Rebased onto Linux 6.10-rc1
> 2) Added Reviewed-by's.
>
> ...and it turns out that all three patches are still required, on -rc1,
> in order to get a clean clang build.
>
> Enjoy!
>
> thanks,
> John Hubbard
>
> John Hubbard (3):
> selftests/futex: don't redefine .PHONY targets (all, clean)
> selftests/futex: don't pass a const char* to asprintf(3)
> selftests/futex: pass _GNU_SOURCE without a value to the compiler
>
> tools/testing/selftests/futex/Makefile | 2 --
> tools/testing/selftests/futex/functional/Makefile | 2 +-
> tools/testing/selftests/futex/functional/futex_requeue_pi.c | 2 +-
> 3 files changed, 2 insertions(+), 4 deletions(-)
>
>
> base-commit: b050496579632f86ee1ef7e7501906db579f3457

Thank you - applied to linux-kselftest fixes branch for next rc.

thanks,
-- Shuah