From: Florian Weimer Subject: [PATCH v4] perf: Avoid implicit function declarations in lexer/parse interface To: linux-perf-users@vger.kernel.org, linux-kernel@vger.kernel.org Cc: Peter Zijlstra , Ingo Molnar , Arnaldo Carvalho de Melo , Mark Rutland , Alexander Shishkin , Jiri Olsa , Namhyung Kim , Ian Rogers , Adrian Hunter , Ian Rogers , Justin M. Forbes Date: Wed, 03 May 2023 20:06:09 +0200 (25 minutes, 29 seconds ago) Message-ID: <874jot47e6.fsf@oldenburg.str.redhat.com> In future compilers, -Wno-implicit-function-declaration may not bring back support for implicit function declarations, a feature that was removed from the C language in C99. Instead of relying on implicit declarations, include the flex-generated header from the bison-generated C code. The expr-flex.h and pmu-flex.h headers needs to be included very late, so that the definition of YYSTYPE is available at that point. Signed-off-by: Florian Weimer --- v4: Rebase on top of perf-next and integrate with bpf-filter.y as well. Even later inclusion of "pmu-flex.h". v3: Fix commit message typo. Try to repost via different mail server. v2: Include the flex-generated files instead of manually-written prototypes. tools/perf/util/Build | 11 ++++++++++- tools/perf/util/bpf-filter.y | 1 + tools/perf/util/expr.y | 2 ++ tools/perf/util/parse-events.y | 1 + tools/perf/util/pmu.y | 4 ++++ 5 files changed, 18 insertions(+), 1 deletion(-) diff --git a/tools/perf/util/Build b/tools/perf/util/Build index bd18fe5f2719..865ce4f66756 100644 --- a/tools/perf/util/Build +++ b/tools/perf/util/Build @@ -298,7 +298,7 @@ CFLAGS_bpf-filter-flex.o += $(flex_flags) bison_flags := -DYYENABLE_NLS=0 BISON_GE_35 := $(shell expr $(shell $(BISON) --version | grep bison | sed -e 's/.\+ \([0-9]\+\).\([0-9]\+\)/\1\2/g') \>\= 35) ifeq ($(BISON_GE_35),1) - bison_flags += -Wno-unused-parameter -Wno-nested-externs -Wno-implicit-function-declaration -Wno-switch-enum -Wno-unused-but-set-variable -Wno-unknown-warning-option + bison_flags += -Wno-unused-parameter -Wno-nested-externs -Wno-switch-enum -Wno-unused-but-set-variable -Wno-unknown-warning-option else bison_flags += -w endif @@ -357,3 +357,12 @@ $(OUTPUT)util/vsprintf.o: ../lib/vsprintf.c FORCE $(OUTPUT)util/list_sort.o: ../lib/list_sort.c FORCE $(call rule_mkdir) $(call if_changed_dep,cc_o_c) + +# These dependencies ensure that the flex-generated .h file is +# available at the time the bison-generated .c sources are compiled. +# Do not depend on the generated .h file to prevent triggering +# parallel flex invocations for the same two output files. +$(OUTPUT)util/bpf-filter-bison.o : $(OUTPUT)util/bpf-filter-flex.c +$(OUTPUT)util/expr-bison.o : $(OUTPUT)util/expr-flex.c +$(OUTPUT)util/parse-events-bison.o : $(OUTPUT)util/parse-events-flex.c +$(OUTPUT)util/pmu-bison.o : $(OUTPUT)util/pmu-flex.c diff --git a/tools/perf/util/bpf-filter.y b/tools/perf/util/bpf-filter.y index 07d6c7926c13..935afafe22eb 100644 --- a/tools/perf/util/bpf-filter.y +++ b/tools/perf/util/bpf-filter.y @@ -8,6 +8,7 @@ #include #include #include "bpf-filter.h" +#include "bpf-filter-flex.h" static void perf_bpf_filter_error(struct list_head *expr __maybe_unused, char const *msg) diff --git a/tools/perf/util/expr.y b/tools/perf/util/expr.y index 250e444bf032..8879fa14960f 100644 --- a/tools/perf/util/expr.y +++ b/tools/perf/util/expr.y @@ -53,6 +53,8 @@ %destructor { ids__free($$.ids); } %{ +#include "expr-flex.h" + static void expr_error(double *final_val __maybe_unused, struct expr_parse_ctx *ctx __maybe_unused, bool compute_ids __maybe_unused, diff --git a/tools/perf/util/parse-events.y b/tools/perf/util/parse-events.y index 4488443e506e..401d33714b23 100644 --- a/tools/perf/util/parse-events.y +++ b/tools/perf/util/parse-events.y @@ -17,6 +17,7 @@ #include "evsel.h" #include "parse-events.h" #include "parse-events-bison.h" +#include "parse-events-flex.h" void parse_events_error(YYLTYPE *loc, void *parse_state, void *scanner, char const *msg); diff --git a/tools/perf/util/pmu.y b/tools/perf/util/pmu.y index dff4e892ac4d..9c67f3d05a80 100644 --- a/tools/perf/util/pmu.y +++ b/tools/perf/util/pmu.y @@ -32,6 +32,10 @@ do { \ DECLARE_BITMAP(bits, PERF_PMU_FORMAT_BITS); } +%{ +#include "pmu-flex.h" +%} + %% format: base-commit: 5d27a645f60940fdf589e4ff5351506a7f0fdbaa