All of lore.kernel.org
 help / color / mirror / Atom feed
* perf pmu: clang points out: address of array 'alias->unit' will always evaluate to 'true'
@ 2017-02-14 18:24 Arnaldo Carvalho de Melo
  2017-02-15 10:50 ` Jiri Olsa
  2017-02-16 20:04 ` [tip:perf/core] perf pmu: Fix check for unset alias->unit array tip-bot for Arnaldo Carvalho de Melo
  0 siblings, 2 replies; 8+ messages in thread
From: Arnaldo Carvalho de Melo @ 2017-02-14 18:24 UTC (permalink / raw)
  To: Jiri Olsa; +Cc: Linux Kernel Mailing List

util/pmu.c:948:28: error: address of array 'alias->unit' will always evaluate to 'true' [-Werror,-Wpointer-bool-conversion]
        if ((info->unit && alias->unit) ||
                        ~~ ~~~~~~~^~~~
util/pmu.c:953:13: error: address of array 'alias->unit' will always evaluate to 'true' [-Werror,-Wpointer-bool-conversion]
        if (alias->unit)
        ~~  ~~~~~~~^~~~
2 errors generated.


So, is this test about having something on that alias->unit array? I.e.
should this suffice?

[acme@jouet linux]$ cat clang.patch 
diff --git a/tools/perf/util/pmu.c b/tools/perf/util/pmu.c
index 82a654dec666..49bfee0e3d9e 100644
--- a/tools/perf/util/pmu.c
+++ b/tools/perf/util/pmu.c
@@ -945,12 +945,12 @@ static int check_info_data(struct perf_pmu_alias *alias,
 	 * define unit, scale and snapshot, fail
 	 * if there's more than one.
 	 */
-	if ((info->unit && alias->unit) ||
+	if ((info->unit && alias->unit[0]) ||
 	    (info->scale && alias->scale) ||
 	    (info->snapshot && alias->snapshot))
 		return -EINVAL;
 
-	if (alias->unit)
+	if (alias->unit[0])
 		info->unit = alias->unit;
 
 	if (alias->scale)
[acme@jouet linux]$ 

^ permalink raw reply related	[flat|nested] 8+ messages in thread

* Re: perf pmu: clang points out: address of array 'alias->unit' will always evaluate to 'true'
  2017-02-14 18:24 perf pmu: clang points out: address of array 'alias->unit' will always evaluate to 'true' Arnaldo Carvalho de Melo
@ 2017-02-15 10:50 ` Jiri Olsa
  2017-02-15 12:41   ` perf bison: clang points out: error: conflicting types for 'parse_events_error' " Arnaldo Carvalho de Melo
  2017-02-16 20:04 ` [tip:perf/core] perf pmu: Fix check for unset alias->unit array tip-bot for Arnaldo Carvalho de Melo
  1 sibling, 1 reply; 8+ messages in thread
From: Jiri Olsa @ 2017-02-15 10:50 UTC (permalink / raw)
  To: Arnaldo Carvalho de Melo; +Cc: Jiri Olsa, Linux Kernel Mailing List

On Tue, Feb 14, 2017 at 03:24:35PM -0300, Arnaldo Carvalho de Melo wrote:
> util/pmu.c:948:28: error: address of array 'alias->unit' will always evaluate to 'true' [-Werror,-Wpointer-bool-conversion]
>         if ((info->unit && alias->unit) ||
>                         ~~ ~~~~~~~^~~~
> util/pmu.c:953:13: error: address of array 'alias->unit' will always evaluate to 'true' [-Werror,-Wpointer-bool-conversion]
>         if (alias->unit)
>         ~~  ~~~~~~~^~~~
> 2 errors generated.
> 
> 
> So, is this test about having something on that alias->unit array? I.e.
> should this suffice?

yep, that seems right.. good catch

thanks,
jirka

> 
> [acme@jouet linux]$ cat clang.patch 
> diff --git a/tools/perf/util/pmu.c b/tools/perf/util/pmu.c
> index 82a654dec666..49bfee0e3d9e 100644
> --- a/tools/perf/util/pmu.c
> +++ b/tools/perf/util/pmu.c
> @@ -945,12 +945,12 @@ static int check_info_data(struct perf_pmu_alias *alias,
>  	 * define unit, scale and snapshot, fail
>  	 * if there's more than one.
>  	 */
> -	if ((info->unit && alias->unit) ||
> +	if ((info->unit && alias->unit[0]) ||
>  	    (info->scale && alias->scale) ||
>  	    (info->snapshot && alias->snapshot))
>  		return -EINVAL;
>  
> -	if (alias->unit)
> +	if (alias->unit[0])
>  		info->unit = alias->unit;
>  
>  	if (alias->scale)
> [acme@jouet linux]$ 

^ permalink raw reply	[flat|nested] 8+ messages in thread

* perf bison: clang points out: error: conflicting types for 'parse_events_error' always evaluate to 'true'
  2017-02-15 10:50 ` Jiri Olsa
@ 2017-02-15 12:41   ` Arnaldo Carvalho de Melo
  2017-02-15 12:52     ` Jiri Olsa
  0 siblings, 1 reply; 8+ messages in thread
From: Arnaldo Carvalho de Melo @ 2017-02-15 12:41 UTC (permalink / raw)
  To: Jiri Olsa; +Cc: Jiri Olsa, Namhyung Kim, Wang Nan, Linux Kernel Mailing List

Em Wed, Feb 15, 2017 at 11:50:56AM +0100, Jiri Olsa escreveu:
> On Tue, Feb 14, 2017 at 03:24:35PM -0300, Arnaldo Carvalho de Melo wrote:
> > util/pmu.c:948:28: error: address of array 'alias->unit' will always evaluate to 'true' [-Werror,-Wpointer-bool-conversion]
> >         if ((info->unit && alias->unit) ||
> >                         ~~ ~~~~~~~^~~~
> > util/pmu.c:953:13: error: address of array 'alias->unit' will always evaluate to 'true' [-Werror,-Wpointer-bool-conversion]
> >         if (alias->unit)
> >         ~~  ~~~~~~~^~~~
> > 2 errors generated.
> > 
> > 
> > So, is this test about having something on that alias->unit array? I.e.
> > should this suffice?
> 
> yep, that seems right.. good catch

Thanks, adding your Acked-by then, ok?

How about this other one:

  CC       /tmp/build/perf/util/trace-event-info.o
util/parse-events.y:699:6: error: conflicting types for 'parse_events_error'
void parse_events_error(YYLTYPE *loc, void *data,
     ^
/tmp/build/perf/util/parse-events-bison.c:2224:7: note: previous implicit declaration is here
      yyerror (&yylloc, _data, scanner, YY_("syntax error"));
      ^
/tmp/build/perf/util/parse-events-bison.c:65:25: note: expanded from macro 'yyerror'
#define yyerror         parse_events_error
                        ^
1 error generated.

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: perf bison: clang points out: error: conflicting types for 'parse_events_error' always evaluate to 'true'
  2017-02-15 12:41   ` perf bison: clang points out: error: conflicting types for 'parse_events_error' " Arnaldo Carvalho de Melo
@ 2017-02-15 12:52     ` Jiri Olsa
  2017-02-15 13:06       ` perf build with clang, modulo libpython: " Arnaldo Carvalho de Melo
  0 siblings, 1 reply; 8+ messages in thread
From: Jiri Olsa @ 2017-02-15 12:52 UTC (permalink / raw)
  To: Arnaldo Carvalho de Melo
  Cc: Jiri Olsa, Namhyung Kim, Wang Nan, Linux Kernel Mailing List

On Wed, Feb 15, 2017 at 09:41:02AM -0300, Arnaldo Carvalho de Melo wrote:
> Em Wed, Feb 15, 2017 at 11:50:56AM +0100, Jiri Olsa escreveu:
> > On Tue, Feb 14, 2017 at 03:24:35PM -0300, Arnaldo Carvalho de Melo wrote:
> > > util/pmu.c:948:28: error: address of array 'alias->unit' will always evaluate to 'true' [-Werror,-Wpointer-bool-conversion]
> > >         if ((info->unit && alias->unit) ||
> > >                         ~~ ~~~~~~~^~~~
> > > util/pmu.c:953:13: error: address of array 'alias->unit' will always evaluate to 'true' [-Werror,-Wpointer-bool-conversion]
> > >         if (alias->unit)
> > >         ~~  ~~~~~~~^~~~
> > > 2 errors generated.
> > > 
> > > 
> > > So, is this test about having something on that alias->unit array? I.e.
> > > should this suffice?
> > 
> > yep, that seems right.. good catch
> 
> Thanks, adding your Acked-by then, ok?

yes

> 
> How about this other one:
> 
>   CC       /tmp/build/perf/util/trace-event-info.o
> util/parse-events.y:699:6: error: conflicting types for 'parse_events_error'
> void parse_events_error(YYLTYPE *loc, void *data,
>      ^
> /tmp/build/perf/util/parse-events-bison.c:2224:7: note: previous implicit declaration is here
>       yyerror (&yylloc, _data, scanner, YY_("syntax error"));
>       ^
> /tmp/build/perf/util/parse-events-bison.c:65:25: note: expanded from macro 'yyerror'
> #define yyerror         parse_events_error
>                         ^
> 1 error generated.
> 

hum, thats generated code.. I guess we need appropriate -Wno-... option ;-)

jirka

^ permalink raw reply	[flat|nested] 8+ messages in thread

* perf build with clang, modulo libpython: Re: perf bison: clang points out: error: conflicting types for 'parse_events_error' always evaluate to 'true'
  2017-02-15 12:52     ` Jiri Olsa
@ 2017-02-15 13:06       ` Arnaldo Carvalho de Melo
  2017-02-15 13:21         ` Jiri Olsa
  2017-02-16 20:05         ` [tip:perf/core] perf tools: Add missing parse_events_error() prototype tip-bot for Arnaldo Carvalho de Melo
  0 siblings, 2 replies; 8+ messages in thread
From: Arnaldo Carvalho de Melo @ 2017-02-15 13:06 UTC (permalink / raw)
  To: Jiri Olsa; +Cc: Jiri Olsa, Namhyung Kim, Wang Nan, Linux Kernel Mailing List

Em Wed, Feb 15, 2017 at 01:52:23PM +0100, Jiri Olsa escreveu:
> On Wed, Feb 15, 2017 at 09:41:02AM -0300, Arnaldo Carvalho de Melo wrote:
> > Em Wed, Feb 15, 2017 at 11:50:56AM +0100, Jiri Olsa escreveu:
> > > On Tue, Feb 14, 2017 at 03:24:35PM -0300, Arnaldo Carvalho de Melo wrote:
> > > > So, is this test about having something on that alias->unit array? I.e.
> > > > should this suffice?

> > > yep, that seems right.. good catch

> > Thanks, adding your Acked-by then, ok?
> 
> yes
 
Thanks!

> > How about this other one:

> > util/parse-events.y:699:6: error: conflicting types for 'parse_events_error'
> > void parse_events_error(YYLTYPE *loc, void *data,
> >      ^
> > /tmp/build/perf/util/parse-events-bison.c:2224:7: note: previous implicit declaration is here
> >       yyerror (&yylloc, _data, scanner, YY_("syntax error"));
> >       ^
> > /tmp/build/perf/util/parse-events-bison.c:65:25: note: expanded from macro 'yyerror'
> > #define yyerror         parse_events_error

> > 1 error generated.

> hum, thats generated code.. I guess we need appropriate -Wno-... option ;-)

That would be too easy, don't shot the messenger :-)

Fix at the end of this message, please ack, with it I managed to build tools/perf using
clang, albeit still with NO_LIBPYTHON=1:

$ readelf -wi ~/bin/perf  | head
Contents of the .debug_info section:

  Compilation Unit @ offset 0x0:
   Length:        0x828 (32-bit)
   Version:       4
   Abbrev Offset: 0x0
   Pointer Size:  8
 <0><b>: Abbrev Number: 1 (DW_TAG_compile_unit)
    <c>   DW_AT_producer    : (indirect string, offset: 0x0): clang version 4.0.0 (http://llvm.org/git/clang.git f5be8ba13adc4ba1011a7ccd60c844bd60427c1c) (http://llvm.org/git/llvm.git efca1a37676f4cd276d947658cf90b0fb625abfd)
    <10>   DW_AT_language    : 12	(ANSI C99)
$ 

$ ls -la ~/bin/perf
-rwxr-xr-x. 2 acme acme 10029688 Feb 15 09:57 /home/acme/bin/perf
$ size ~/bin/perf
   text	   data	    bss	    dec	    hex	filename
3447514	 831320	23901696	28180530	1ae0032	/home/acme/bin/perf
$ strip ~/bin/perf
$ ls -la ~/bin/perf
-rwxr-xr-x. 2 acme acme 4284968 Feb 15 10:00 /home/acme/bin/perf
$

Compare with with gcc, also with NO_LIBPYTHON=1:

[acme@jouet linux]$ readelf -wi ~/bin/perf  | head
Contents of the .debug_info section:

  Compilation Unit @ offset 0x0:
   Length:        0x1d43 (32-bit)
   Version:       4
   Abbrev Offset: 0x0
   Pointer Size:  8
 <0><b>: Abbrev Number: 1 (DW_TAG_compile_unit)
    <c>   DW_AT_producer    : (indirect string, offset: 0x1b27c): GNU C99 6.3.1 20161221 (Red Hat 6.3.1-1) -mtune=generic -march=x86-64 -ggdb3 -O6 -std=gnu99 -fno-omit-frame-pointer -funwind-tables -fstack-protector-all
    <10>   DW_AT_language    : 12	(ANSI C99)
[acme@jouet linux]$ ls -la ~/bin/perf
-rwxr-xr-x. 2 acme acme 16948144 Feb 15 10:02 /home/acme/bin/perf
[acme@jouet linux]$ size ~/bin/perf
   text	   data	    bss	    dec	    hex	filename
3671662	 836480	23902752	28410894	1b1840e	/home/acme/bin/perf
[acme@jouet linux]$ strip ~/bin/perf
[acme@jouet linux]$ ls -la ~/bin/perf
-rwxr-xr-x. 2 acme acme 4515280 Feb 15 10:02 /home/acme/bin/perf
[acme@jouet linux]$

to build with libpython I need to filter out the -spec=bla/bla/bla/bla
option generated automatically somewhere:

clang-4.0: error: argument unused during compilation: '-specs=/usr/lib/rpm/redhat/redhat-hardened-cc1' [-Werror,-Wunused-command-line-argument]
clang-4.0: error: argument unused during compilation: '-specs=/usr/lib/rpm/redhat/redhat-hardened-cc1' [-Werror,-Wunused-command-line-argument]
error: command 'clang' failed with exit status 1
cp: cannot stat '/tmp/build/perf/python_ext_build/lib/perf.so': No such file or directory
Makefile.perf:381: recipe for target '/tmp/build/perf/python/perf.so' failed
make[2]: *** [/tmp/build/perf/python/perf.so] Error 1
make[2]: *** Waiting for unfinished jobs....

---------------------------------------------------


diff --git a/tools/perf/util/parse-events.y b/tools/perf/util/parse-events.y
index 3a5196380609..a14b47ab3879 100644
--- a/tools/perf/util/parse-events.y
+++ b/tools/perf/util/parse-events.y
@@ -17,6 +17,8 @@
 #include "parse-events.h"
 #include "parse-events-bison.h"
 
+void parse_events_error(YYLTYPE *loc, void *data, void *scanner, char const *msg);
+
 #define ABORT_ON(val) \
 do { \
 	if (val) \

^ permalink raw reply related	[flat|nested] 8+ messages in thread

* Re: perf build with clang, modulo libpython: Re: perf bison: clang points out: error: conflicting types for 'parse_events_error' always evaluate to 'true'
  2017-02-15 13:06       ` perf build with clang, modulo libpython: " Arnaldo Carvalho de Melo
@ 2017-02-15 13:21         ` Jiri Olsa
  2017-02-16 20:05         ` [tip:perf/core] perf tools: Add missing parse_events_error() prototype tip-bot for Arnaldo Carvalho de Melo
  1 sibling, 0 replies; 8+ messages in thread
From: Jiri Olsa @ 2017-02-15 13:21 UTC (permalink / raw)
  To: Arnaldo Carvalho de Melo
  Cc: Jiri Olsa, Namhyung Kim, Wang Nan, Linux Kernel Mailing List

On Wed, Feb 15, 2017 at 10:06:05AM -0300, Arnaldo Carvalho de Melo wrote:

SNIP

> 
> clang-4.0: error: argument unused during compilation: '-specs=/usr/lib/rpm/redhat/redhat-hardened-cc1' [-Werror,-Wunused-command-line-argument]
> clang-4.0: error: argument unused during compilation: '-specs=/usr/lib/rpm/redhat/redhat-hardened-cc1' [-Werror,-Wunused-command-line-argument]
> error: command 'clang' failed with exit status 1
> cp: cannot stat '/tmp/build/perf/python_ext_build/lib/perf.so': No such file or directory
> Makefile.perf:381: recipe for target '/tmp/build/perf/python/perf.so' failed
> make[2]: *** [/tmp/build/perf/python/perf.so] Error 1
> make[2]: *** Waiting for unfinished jobs....
> 
> ---------------------------------------------------
> 
> 
> diff --git a/tools/perf/util/parse-events.y b/tools/perf/util/parse-events.y
> index 3a5196380609..a14b47ab3879 100644
> --- a/tools/perf/util/parse-events.y
> +++ b/tools/perf/util/parse-events.y
> @@ -17,6 +17,8 @@
>  #include "parse-events.h"
>  #include "parse-events-bison.h"
>  
> +void parse_events_error(YYLTYPE *loc, void *data, void *scanner, char const *msg);
> +
>  #define ABORT_ON(val) \
>  do { \
>  	if (val) \

if that helps.. seems harmless ;-) ack

jirka

^ permalink raw reply	[flat|nested] 8+ messages in thread

* [tip:perf/core] perf pmu: Fix check for unset alias->unit array
  2017-02-14 18:24 perf pmu: clang points out: address of array 'alias->unit' will always evaluate to 'true' Arnaldo Carvalho de Melo
  2017-02-15 10:50 ` Jiri Olsa
@ 2017-02-16 20:04 ` tip-bot for Arnaldo Carvalho de Melo
  1 sibling, 0 replies; 8+ messages in thread
From: tip-bot for Arnaldo Carvalho de Melo @ 2017-02-16 20:04 UTC (permalink / raw)
  To: linux-tip-commits
  Cc: jolsa, tglx, wangnan0, hpa, mingo, linux-kernel, namhyung, acme,
	dsahern, adrian.hunter

Commit-ID:  b30a7d1fc96d60fe2c02e375a56a046385701d17
Gitweb:     http://git.kernel.org/tip/b30a7d1fc96d60fe2c02e375a56a046385701d17
Author:     Arnaldo Carvalho de Melo <acme@redhat.com>
AuthorDate: Wed, 15 Feb 2017 10:06:20 -0300
Committer:  Arnaldo Carvalho de Melo <acme@redhat.com>
CommitDate: Wed, 15 Feb 2017 10:06:20 -0300

perf pmu: Fix check for unset alias->unit array

The alias->unit field is an array, so to check that it is not set we
should see if it is an empty string, i.e. alias->unit[0], instead of
checking alias->unit != NULL, as this will _always_ evaluate to 'true'.

Pointed out by clang.

Acked-by: Jiri Olsa <jolsa@kernel.org>
Cc: Adrian Hunter <adrian.hunter@intel.com>
Cc: David Ahern <dsahern@gmail.com>
Cc: Namhyung Kim <namhyung@kernel.org>
Cc: Wang Nan <wangnan0@huawei.com>
Link: http://lkml.kernel.org/r/20170214182435.GD4458@kernel.org
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
---
 tools/perf/util/pmu.c | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/tools/perf/util/pmu.c b/tools/perf/util/pmu.c
index 82a654de..49bfee0 100644
--- a/tools/perf/util/pmu.c
+++ b/tools/perf/util/pmu.c
@@ -945,12 +945,12 @@ static int check_info_data(struct perf_pmu_alias *alias,
 	 * define unit, scale and snapshot, fail
 	 * if there's more than one.
 	 */
-	if ((info->unit && alias->unit) ||
+	if ((info->unit && alias->unit[0]) ||
 	    (info->scale && alias->scale) ||
 	    (info->snapshot && alias->snapshot))
 		return -EINVAL;
 
-	if (alias->unit)
+	if (alias->unit[0])
 		info->unit = alias->unit;
 
 	if (alias->scale)

^ permalink raw reply related	[flat|nested] 8+ messages in thread

* [tip:perf/core] perf tools: Add missing parse_events_error() prototype
  2017-02-15 13:06       ` perf build with clang, modulo libpython: " Arnaldo Carvalho de Melo
  2017-02-15 13:21         ` Jiri Olsa
@ 2017-02-16 20:05         ` tip-bot for Arnaldo Carvalho de Melo
  1 sibling, 0 replies; 8+ messages in thread
From: tip-bot for Arnaldo Carvalho de Melo @ 2017-02-16 20:05 UTC (permalink / raw)
  To: linux-tip-commits
  Cc: adrian.hunter, mingo, jolsa, linux-kernel, acme, hpa, tglx,
	namhyung, dsahern, wangnan0

Commit-ID:  34a0548f01626b01c9e98d9627812c3c9f6b6f7d
Gitweb:     http://git.kernel.org/tip/34a0548f01626b01c9e98d9627812c3c9f6b6f7d
Author:     Arnaldo Carvalho de Melo <acme@redhat.com>
AuthorDate: Wed, 15 Feb 2017 10:09:11 -0300
Committer:  Arnaldo Carvalho de Melo <acme@redhat.com>
CommitDate: Wed, 15 Feb 2017 11:20:49 -0300

perf tools: Add missing parse_events_error() prototype

As pointed out by clang, we were not providing a prototype for a
function before using it:

  util/parse-events.y:699:6: error: conflicting types for 'parse_events_error'
  void parse_events_error(YYLTYPE *loc, void *data,
       ^
  /tmp/build/perf/util/parse-events-bison.c:2224:7: note: previous implicit declaration is here
        yyerror (&yylloc, _data, scanner, YY_("syntax error"));
        ^
  /tmp/build/perf/util/parse-events-bison.c:65:25: note: expanded from macro 'yyerror'
  #define yyerror         parse_events_error

  1 error generated.

One line fix it.

Acked-by: Jiri Olsa <jolsa@kernel.org>
Cc: Adrian Hunter <adrian.hunter@intel.com>
Cc: David Ahern <dsahern@gmail.com>
Cc: Namhyung Kim <namhyung@kernel.org>
Cc: Wang Nan <wangnan0@huawei.com>
Link: http://lkml.kernel.org/r/20170215130605.GC4020@kernel.org
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
---
 tools/perf/util/parse-events.y | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/tools/perf/util/parse-events.y b/tools/perf/util/parse-events.y
index 3a51963..a14b47a 100644
--- a/tools/perf/util/parse-events.y
+++ b/tools/perf/util/parse-events.y
@@ -17,6 +17,8 @@
 #include "parse-events.h"
 #include "parse-events-bison.h"
 
+void parse_events_error(YYLTYPE *loc, void *data, void *scanner, char const *msg);
+
 #define ABORT_ON(val) \
 do { \
 	if (val) \

^ permalink raw reply related	[flat|nested] 8+ messages in thread

end of thread, other threads:[~2017-02-16 20:05 UTC | newest]

Thread overview: 8+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2017-02-14 18:24 perf pmu: clang points out: address of array 'alias->unit' will always evaluate to 'true' Arnaldo Carvalho de Melo
2017-02-15 10:50 ` Jiri Olsa
2017-02-15 12:41   ` perf bison: clang points out: error: conflicting types for 'parse_events_error' " Arnaldo Carvalho de Melo
2017-02-15 12:52     ` Jiri Olsa
2017-02-15 13:06       ` perf build with clang, modulo libpython: " Arnaldo Carvalho de Melo
2017-02-15 13:21         ` Jiri Olsa
2017-02-16 20:05         ` [tip:perf/core] perf tools: Add missing parse_events_error() prototype tip-bot for Arnaldo Carvalho de Melo
2017-02-16 20:04 ` [tip:perf/core] perf pmu: Fix check for unset alias->unit array tip-bot for Arnaldo Carvalho de Melo

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.