BPF List
 help / color / mirror / Atom feed
From: Yonghong Song <yhs@fb.com>
To: Andrii Nakryiko <andrii.nakryiko@gmail.com>
Cc: bpf <bpf@vger.kernel.org>, Alexei Starovoitov <ast@kernel.org>,
	Andrii Nakryiko <andrii@kernel.org>,
	Daniel Borkmann <daniel@iogearbox.net>,
	Kernel Team <kernel-team@fb.com>
Subject: Re: [PATCH bpf-next] selftests/bpf: fix a clang deprecated-declarations compilation error
Date: Thu, 17 Feb 2022 15:55:01 -0800	[thread overview]
Message-ID: <d3d11e33-754c-dcc0-a63c-697ecfb63de0@fb.com> (raw)
In-Reply-To: <CAEf4BzaWczdp4JnK8t-Fd95zsVcadUuXmE9nB_icvnimztfDWg@mail.gmail.com>



On 2/17/22 1:59 PM, Andrii Nakryiko wrote:
> On Thu, Feb 17, 2022 at 11:40 AM Yonghong Song <yhs@fb.com> wrote:
>>
>> Build the kernel and selftest with clang compiler with LLVM=1,
>>    make -j LLVM=1
>>    make -C tools/testing/selftests/bpf -j LLVM=1
>>
>> I hit the following selftests/bpf compilation error:
>>    In file included from test_cpp.cpp:3:
>>    /.../tools/testing/selftests/bpf/tools/include/bpf/libbpf.h:73:8:
>>      error: 'relaxed_core_relocs' is deprecated: libbpf v0.6+: field has no effect [-Werror,-Wdeprecated-declarations]
>>    struct bpf_object_open_opts {
>>           ^
>>    test_cpp.cpp:56:2: note: in implicit move constructor for 'bpf_object_open_opts' first required here
>>            LIBBPF_OPTS(bpf_object_open_opts, opts);
>>            ^
>>    /.../tools/testing/selftests/bpf/tools/include/bpf/libbpf_common.h:77:3: note: expanded from macro 'LIBBPF_OPTS'
>>                    (struct TYPE) {                                             \
>>                    ^
>>    /.../tools/testing/selftests/bpf/tools/include/bpf/libbpf.h:90:2: note: 'relaxed_core_relocs' has been explicitly marked deprecated here
>>            LIBBPF_DEPRECATED_SINCE(0, 6, "field has no effect")
>>            ^
>>    /.../tools/testing/selftests/bpf/tools/include/bpf/libbpf_common.h:24:4: note: expanded from macro 'LIBBPF_DEPRECATED_SINCE'
>>                    (LIBBPF_DEPRECATED("libbpf v" # major "." # minor "+: " msg))
>>                     ^
>>    /.../tools/testing/selftests/bpf/tools/include/bpf/libbpf_common.h:19:47: note: expanded from macro 'LIBBPF_DEPRECATED'
>>    #define LIBBPF_DEPRECATED(msg) __attribute__((deprecated(msg)))
>>
>> There are two ways to fix the issue, one is to use GCC diagnostic ignore pragma, and the
>> other is to open code bpf_object_open_opts instead of using LIBBPF_OPTS.
>> Since in general LIBBPF_OPTS is preferred, the patch fixed the issue by
>> adding proper GCC diagnostic ignore pragmas.
>>
>> Signed-off-by: Yonghong Song <yhs@fb.com>
>> ---
> 
> Do you know why we see this only with Clang? Why GCC doesn't generate this?

Not a gcc internal expert. But I guess gcc didn't look into struct field 
deprecated attribute.

The following is a simpler reproducer. The structure initialization
in the code means the compiler needs to initialize each named field
with either default value (0) or provided value. If one of fields
is marked as deprecated, the compiler can emit warning message since
that field is accessed.

[$ ~/tmp3] cat t.cc
struct bpf_object_open_opts {
         long sz;
         const char *objname;
         int relax_maps;
         int relaxed_core_relocs __attribute__((deprecated("msg")));
         const char *pin_root_path;
};

void foo(void *);
int test(void) {
         struct bpf_object_open_opts tmp = (struct bpf_object_open_opts) 
{ .sz = 2, };
         foo(&tmp);
         return 0;
}

[$ ~/tmp3] clang++ -c -g t.cc -Wall -Werror
t.cc:1:8: error: 'relaxed_core_relocs' is deprecated: msg 
[-Werror,-Wdeprecated-declarations]
struct bpf_object_open_opts {
        ^
t.cc:11:43: note: in implicit move constructor for 
'bpf_object_open_opts' first required here
         struct bpf_object_open_opts tmp = (struct bpf_object_open_opts) 
{ .sz = 2, };
                                           ^
t.cc:5:41: note: 'relaxed_core_relocs' has been explicitly marked 
deprecated here
         int relaxed_core_relocs __attribute__((deprecated("msg")));
                                                ^
1 error generated.
[$ ~/tmp3] g++ -c -g t.cc -Wall -Werror
[$ ~/tmp3] g++ --version
g++ (GCC) 8.5.0 20210514 (Red Hat 8.5.0-3)
Copyright (C) 2018 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

[$ ~/tmp3]

> 
> 
>>   tools/testing/selftests/bpf/test_cpp.cpp | 3 +++
>>   1 file changed, 3 insertions(+)
>>
>> diff --git a/tools/testing/selftests/bpf/test_cpp.cpp b/tools/testing/selftests/bpf/test_cpp.cpp
>> index 773f165c4898..19ad172036da 100644
>> --- a/tools/testing/selftests/bpf/test_cpp.cpp
>> +++ b/tools/testing/selftests/bpf/test_cpp.cpp
>> @@ -1,6 +1,9 @@
>>   /* SPDX-License-Identifier: (LGPL-2.1 OR BSD-2-Clause) */
>>   #include <iostream>
>> +#pragma GCC diagnostic push
>> +#pragma GCC diagnostic ignored "-Wdeprecated-declarations"
>>   #include <bpf/libbpf.h>
>> +#pragma GCC diagnostic pop
>>   #include <bpf/bpf.h>
>>   #include <bpf/btf.h>
>>   #include "test_core_extern.skel.h"
>> --
>> 2.30.2
>>

  reply	other threads:[~2022-02-17 23:55 UTC|newest]

Thread overview: 4+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-02-17 19:40 [PATCH bpf-next] selftests/bpf: fix a clang deprecated-declarations compilation error Yonghong Song
2022-02-17 21:59 ` Andrii Nakryiko
2022-02-17 23:55   ` Yonghong Song [this message]
2022-02-20  0:50 ` patchwork-bot+netdevbpf

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=d3d11e33-754c-dcc0-a63c-697ecfb63de0@fb.com \
    --to=yhs@fb.com \
    --cc=andrii.nakryiko@gmail.com \
    --cc=andrii@kernel.org \
    --cc=ast@kernel.org \
    --cc=bpf@vger.kernel.org \
    --cc=daniel@iogearbox.net \
    --cc=kernel-team@fb.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox