Messages in this thread | | | From | Ian Rogers <> | Date | Sun, 23 Feb 2020 21:55:38 -0800 | Subject | Re: [PATCH] perf: fix -Wstring-compare |
| |
On Sun, Feb 23, 2020 at 11:35 AM Nick Desaulniers <nick.desaulniers@gmail.com> wrote: > > Clang warns: > > util/block-info.c:298:18: error: result of comparison against a string > literal is unspecified (use an explicit string comparison function > instead) [-Werror,-Wstring-compare] > if ((start_line != SRCLINE_UNKNOWN) && (end_line != SRCLINE_UNKNOWN)) { > ^ ~~~~~~~~~~~~~~~ > util/block-info.c:298:51: error: result of comparison against a string > literal is unspecified (use an explicit string comparison function > instead) [-Werror,-Wstring-compare] > if ((start_line != SRCLINE_UNKNOWN) && (end_line != SRCLINE_UNKNOWN)) { > ^ ~~~~~~~~~~~~~~~ > util/block-info.c:298:18: error: result of comparison against a string > literal is unspecified (use an explicit string > comparison function instead) [-Werror,-Wstring-compare] > if ((start_line != SRCLINE_UNKNOWN) && (end_line != SRCLINE_UNKNOWN)) { > ^ ~~~~~~~~~~~~~~~ > util/block-info.c:298:51: error: result of comparison against a string > literal is unspecified (use an explicit string comparison function > instead) [-Werror,-Wstring-compare] > if ((start_line != SRCLINE_UNKNOWN) && (end_line != SRCLINE_UNKNOWN)) { > ^ ~~~~~~~~~~~~~~~ > util/map.c:434:15: error: result of comparison against a string literal > is unspecified (use an explicit string comparison function instead) > [-Werror,-Wstring-compare] > if (srcline != SRCLINE_UNKNOWN) > ^ ~~~~~~~~~~~~~~~ > > Link: https://github.com/ClangBuiltLinux/linux/issues/900 > Signed-off-by: Nick Desaulniers <nick.desaulniers@gmail.com> > --- > Note: was generated off of mainline; can rebase on -next if it doesn't > apply cleanly.
Looks good to me. Some more context: https://clang.llvm.org/docs/DiagnosticsReference.html#wstring-compare The spec says: J.1 Unspecified behavior The following are unspecified: .. Whether two string literals result in distinct arrays (6.4.5).
> tools/perf/builtin-diff.c | 3 ++- > tools/perf/util/block-info.c | 3 ++- > tools/perf/util/map.c | 2 +- > 3 files changed, 5 insertions(+), 3 deletions(-) > > diff --git a/tools/perf/builtin-diff.c b/tools/perf/builtin-diff.c > index f8b6ae557d8b..c03c36fde7e2 100644 > --- a/tools/perf/builtin-diff.c > +++ b/tools/perf/builtin-diff.c > @@ -1312,7 +1312,8 @@ static int cycles_printf(struct hist_entry *he, struct hist_entry *pair, > end_line = map__srcline(he->ms.map, bi->sym->start + bi->end, > he->ms.sym); > > - if ((start_line != SRCLINE_UNKNOWN) && (end_line != SRCLINE_UNKNOWN)) { > + if ((strncmp(start_line, SRCLINE_UNKNOWN, strlen(SRCLINE_UNKNOWN)) != 0) && > + (strncmp(end_line, SRCLINE_UNKNOWN, strlen(SRCLINE_UNKNOWN)) != 0)) { > scnprintf(buf, sizeof(buf), "[%s -> %s] %4ld", > start_line, end_line, block_he->diff.cycles); > } else { > diff --git a/tools/perf/util/block-info.c b/tools/perf/util/block-info.c > index c4b030bf6ec2..fbbb6d640dad 100644 > --- a/tools/perf/util/block-info.c > +++ b/tools/perf/util/block-info.c > @@ -295,7 +295,8 @@ static int block_range_entry(struct perf_hpp_fmt *fmt, struct perf_hpp *hpp, > end_line = map__srcline(he->ms.map, bi->sym->start + bi->end, > he->ms.sym); > > - if ((start_line != SRCLINE_UNKNOWN) && (end_line != SRCLINE_UNKNOWN)) { > + if ((strncmp(start_line, SRCLINE_UNKNOWN, strlen(SRCLINE_UNKNOWN)) != 0) && > + (strncmp(end_line, SRCLINE_UNKNOWN, strlen(SRCLINE_UNKNOWN)) != 0)) { > scnprintf(buf, sizeof(buf), "[%s -> %s]", > start_line, end_line); > } else { > diff --git a/tools/perf/util/map.c b/tools/perf/util/map.c > index a08ca276098e..95428511300d 100644 > --- a/tools/perf/util/map.c > +++ b/tools/perf/util/map.c > @@ -431,7 +431,7 @@ int map__fprintf_srcline(struct map *map, u64 addr, const char *prefix, > > if (map && map->dso) { > char *srcline = map__srcline(map, addr, NULL); > - if (srcline != SRCLINE_UNKNOWN) > + if (strncmp(srcline, SRCLINE_UNKNOWN, strlen(SRCLINE_UNKNOWN)) != 0) > ret = fprintf(fp, "%s%s", prefix, srcline); > free_srcline(srcline); > } > -- > 2.17.1 > > -- > You received this message because you are subscribed to the Google Groups "Clang Built Linux" group. > To unsubscribe from this group and stop receiving emails from it, send an email to clang-built-linux+unsubscribe@googlegroups.com. > To view this discussion on the web visit https://groups.google.com/d/msgid/clang-built-linux/20200223193456.25291-1-nick.desaulniers%40gmail.com.
| |