On 4/6/19 10:37 PM, Andrey Ignatov wrote: > vsprintf() in __base_pr() uses nonliteral format string and it breaks > compilation for those who provide corresponding extra CFLAGS, e.g.: > https://github.com/libbpf/libbpf/issues/27 > > If libbpf is built with the flags from PR: > > libbpf.c:68:26: error: format string is not a string literal > [-Werror,-Wformat-nonliteral] > return vfprintf(stderr, format, args); > ^~~~~~ > 1 error generated. > > Ignore this warning since the use case in libbpf.c is legit. > > Signed-off-by: Andrey Ignatov <r...@fb.com>
Tested with clang compiler as well. It also resolved the same issue when using clang to build libbpf in libbpf repo. Acked-by: Yonghong Song <y...@fb.com> > --- > tools/lib/bpf/libbpf.c | 5 +++++ > 1 file changed, 5 insertions(+) > > diff --git a/tools/lib/bpf/libbpf.c b/tools/lib/bpf/libbpf.c > index e1e4d35cf08e..1ebfe7943d53 100644 > --- a/tools/lib/bpf/libbpf.c > +++ b/tools/lib/bpf/libbpf.c > @@ -52,6 +52,11 @@ > #define BPF_FS_MAGIC 0xcafe4a11 > #endif > > +/* vsprintf() in __base_pr() uses nonliteral format string. It may break > + * compilation if user enables corresponding warning. Disable it explicitly. > + */ > +#pragma GCC diagnostic ignored "-Wformat-nonliteral" > + > #define __printf(a, b) __attribute__((format(printf, a, b))) > > static int __base_pr(enum libbpf_print_level level, const char *format, >