Re: [Cocci] A few build failures with OCaml 4.12.0

2021-03-02 Thread Julia Lawall
This problem is fixed now in the github version.

Thanks again Richard and Markus for the report.

julia

On Tue, 2 Mar 2021, Richard W.M. Jones wrote:

> ocamlfind ocamlopt -c -package result -package seq -bin-annot -no-alias-deps 
> -I . -alert -deprecated stdcompat__arg_s.mli -o stdcompat__arg_s.cmi
> File "stdcompat__arg_s.mli", lines 3-17, characters 0-38:
>  3 | type spec = Arg.spec =
>  4 |   | Unit of (unit -> unit)
>  5 |   | Bool of (bool -> unit)
>  6 |   | Set of bool ref
>  7 |   | Clear of bool ref
> ...
> 14 |   | Tuple of spec list
> 15 |   | Symbol of string list * (string -> unit)
> 16 |   | Rest of (string -> unit)
> 17 |   | Expand of (string -> string array).
> Error: This variant or record definition does not match that of type Arg.spec
>Constructors number 14 have different names, Rest_all and Expand.
>
> There is a new Rest_all constructor:
>
> https://github.com/ocaml/ocaml/blob/500d8dc8296d09305b5413f140c63ffee1de111d/stdlib/arg.mli#L92
>
> --
>
> ocamlfind ocamlopt -c -package result -package seq -bin-annot -no-alias-deps 
> -I . -alert -deprecated stdcompat__spacetime_s.mli -o 
> stdcompat__spacetime_s.cmi
> File "stdcompat__spacetime_s.mli", line 3, characters 16-32:
> 3 | module Series = Spacetime.Series
> 
> Error: Unbound module Spacetime
>
> This module was removed in OCaml commit
> 540996d21ee3793a1cecce252c81fb76a6b9fd61.
>
> --
>
> ocamlfind ocamlc -c -package result -package seq -bin-annot -no-alias-deps -I 
> . -alert -deprecated stdcompat__ephemeron.ml -o stdcompat__ephemeron.cmo
> File "stdcompat__ephemeron.ml", line 1:
> Error: The implementation stdcompat__ephemeron.ml
>does not match the interface stdcompat__ephemeron.cmi:
>...
>At position module type S = 
>Type declarations do not match:
>  type 'a t
>is not included in
>  type !'a t
>Their variances do not agree.
>File "hashtbl.mli", line 335, characters 4-14: Expected declaration
>File "stdcompat__ephemeron_s.mli", line 6, characters 4-13:
>  Actual declaration
>
> Not sure about this one but AFAICT cocci doesn't use this module.
>
> --
>
> I made a patch to workaround the issues in Fedora, but it's a pure hack:
>
>   https://src.fedoraproject.org/rpms/coccinelle/tree/rawhide
>
> Rich.
>
> --
> Richard Jones, Virtualization Group, Red Hat http://people.redhat.com/~rjones
> Read my programming and virtualization blog: http://rwmj.wordpress.com
> libguestfs lets you edit virtual machines.  Supports shell scripting,
> bindings from many languages.  http://libguestfs.org
>
> ___
> Cocci mailing list
> Cocci@systeme.lip6.fr
> https://systeme.lip6.fr/mailman/listinfo/cocci
>
___
Cocci mailing list
Cocci@systeme.lip6.fr
https://systeme.lip6.fr/mailman/listinfo/cocci


Re: [Cocci] A few build failures with OCaml 4.12.0

2021-03-02 Thread Richard W.M. Jones
On Tue, Mar 02, 2021 at 03:52:21PM +0100, Julia Lawall wrote:
> This problem is fixed now in the github version.

Yup, can confirm it now works with git @ 3dc5d027b448

Thanks,

Rich.

-- 
Richard Jones, Virtualization Group, Red Hat http://people.redhat.com/~rjones
Read my programming and virtualization blog: http://rwmj.wordpress.com
virt-p2v converts physical machines to virtual machines.  Boot with a
live CD or over the network (PXE) and turn machines into KVM guests.
http://libguestfs.org/virt-v2v

___
Cocci mailing list
Cocci@systeme.lip6.fr
https://systeme.lip6.fr/mailman/listinfo/cocci


Re: [Cocci] Checking evolution according to version 1.1.0

2021-03-02 Thread Richard W.M. Jones
On Sun, Feb 28, 2021 at 09:01:54PM +0100, Markus Elfring wrote:
> > A new version 1.1.0 has been released.
> 
> Thanks.
> 
> I have dared to activate also a current OCaml version by the command
> “opam switch create 4.12.0”.
> I have tried to rebuild your software accordingly.
> 
> elfring@Sonne:~/Projekte/Coccinelle/20160205> make distclean && git checkout 
> master && git pull && ./autogen && ./configure && echo "$(./version.sh)" && 
> grep VERSION=1 Makefile.config
> 
> 
> Now I stumble on the following error message.
> 
> elfring@Sonne:~/Projekte/Coccinelle/20160205> LANG=C make world
> make -C bundles/stdcompat all
> make[1]: Entering directory 
> '/home/elfring/Projekte/Coccinelle/20160205/bundles/stdcompat'
> cd stdcompat-current; make && cp *.mli *.cmi *.cmx *.cma *.cmxa *.a *.h ..
> make[2]: Entering directory 
> '/home/elfring/Projekte/Coccinelle/20160205/bundles/stdcompat/stdcompat-current'
> make  all-am
> make[3]: Entering directory 
> '/home/elfring/Projekte/Coccinelle/20160205/bundles/stdcompat/stdcompat-current'
> ocamlfind ocamlopt -c -package seq -package uchar -bin-annot -no-alias-deps 
> -I . -alert -deprecated stdcompat__arg_s.mli -o stdcompat__arg_s.cmi
> File "stdcompat__arg_s.mli", lines 3-17, characters 0-38:
>  3 | type spec = Arg.spec =
>  4 |   | Unit of (unit -> unit)
>  5 |   | Bool of (bool -> unit)
>  6 |   | Set of bool ref
>  7 |   | Clear of bool ref
> ...
> 14 |   | Tuple of spec list
> 15 |   | Symbol of string list * (string -> unit)
> 16 |   | Rest of (string -> unit)
> 17 |   | Expand of (string -> string array).
> Error: This variant or record definition does not match that of type Arg.spec
>Constructors number 14 have different names, Rest_all and Expand.
> make[3]: *** [Makefile:1612: stdcompat__arg_s.cmi] Error 2
> …
> 
> 
> Would you like to point any corresponding adjustments out?

This patch will make it work, although it's a hack:

https://src.fedoraproject.org/rpms/coccinelle/tree/rawhide

Rich.

-- 
Richard Jones, Virtualization Group, Red Hat http://people.redhat.com/~rjones
Read my programming and virtualization blog: http://rwmj.wordpress.com
virt-builder quickly builds VMs from scratch
http://libguestfs.org/virt-builder.1.html

___
Cocci mailing list
Cocci@systeme.lip6.fr
https://systeme.lip6.fr/mailman/listinfo/cocci


[Cocci] A few build failures with OCaml 4.12.0

2021-03-02 Thread Richard W.M. Jones
ocamlfind ocamlopt -c -package result -package seq -bin-annot -no-alias-deps -I 
. -alert -deprecated stdcompat__arg_s.mli -o stdcompat__arg_s.cmi
File "stdcompat__arg_s.mli", lines 3-17, characters 0-38:
 3 | type spec = Arg.spec =
 4 |   | Unit of (unit -> unit) 
 5 |   | Bool of (bool -> unit) 
 6 |   | Set of bool ref 
 7 |   | Clear of bool ref 
...
14 |   | Tuple of spec list 
15 |   | Symbol of string list * (string -> unit) 
16 |   | Rest of (string -> unit) 
17 |   | Expand of (string -> string array).
Error: This variant or record definition does not match that of type Arg.spec
   Constructors number 14 have different names, Rest_all and Expand.

There is a new Rest_all constructor:

https://github.com/ocaml/ocaml/blob/500d8dc8296d09305b5413f140c63ffee1de111d/stdlib/arg.mli#L92

--

ocamlfind ocamlopt -c -package result -package seq -bin-annot -no-alias-deps -I 
. -alert -deprecated stdcompat__spacetime_s.mli -o stdcompat__spacetime_s.cmi
File "stdcompat__spacetime_s.mli", line 3, characters 16-32:
3 | module Series = Spacetime.Series

Error: Unbound module Spacetime

This module was removed in OCaml commit
540996d21ee3793a1cecce252c81fb76a6b9fd61.

--

ocamlfind ocamlc -c -package result -package seq -bin-annot -no-alias-deps -I . 
-alert -deprecated stdcompat__ephemeron.ml -o stdcompat__ephemeron.cmo
File "stdcompat__ephemeron.ml", line 1:
Error: The implementation stdcompat__ephemeron.ml
   does not match the interface stdcompat__ephemeron.cmi:
   ...
   At position module type S = 
   Type declarations do not match:
 type 'a t
   is not included in
 type !'a t
   Their variances do not agree.
   File "hashtbl.mli", line 335, characters 4-14: Expected declaration
   File "stdcompat__ephemeron_s.mli", line 6, characters 4-13:
 Actual declaration

Not sure about this one but AFAICT cocci doesn't use this module.

--

I made a patch to workaround the issues in Fedora, but it's a pure hack:

  https://src.fedoraproject.org/rpms/coccinelle/tree/rawhide

Rich.

-- 
Richard Jones, Virtualization Group, Red Hat http://people.redhat.com/~rjones
Read my programming and virtualization blog: http://rwmj.wordpress.com
libguestfs lets you edit virtual machines.  Supports shell scripting,
bindings from many languages.  http://libguestfs.org

___
Cocci mailing list
Cocci@systeme.lip6.fr
https://systeme.lip6.fr/mailman/listinfo/cocci


Re: [Cocci] A few build failures with OCaml 4.12.0

2021-03-02 Thread Julia Lawall



On Tue, 2 Mar 2021, Richard W.M. Jones wrote:

> ocamlfind ocamlopt -c -package result -package seq -bin-annot -no-alias-deps 
> -I . -alert -deprecated stdcompat__arg_s.mli -o stdcompat__arg_s.cmi
> File "stdcompat__arg_s.mli", lines 3-17, characters 0-38:
>  3 | type spec = Arg.spec =
>  4 |   | Unit of (unit -> unit)
>  5 |   | Bool of (bool -> unit)
>  6 |   | Set of bool ref
>  7 |   | Clear of bool ref
> ...
> 14 |   | Tuple of spec list
> 15 |   | Symbol of string list * (string -> unit)
> 16 |   | Rest of (string -> unit)
> 17 |   | Expand of (string -> string array).
> Error: This variant or record definition does not match that of type Arg.spec
>Constructors number 14 have different names, Rest_all and Expand.
>
> There is a new Rest_all constructor:
>
> https://github.com/ocaml/ocaml/blob/500d8dc8296d09305b5413f140c63ffee1de111d/stdlib/arg.mli#L92
>
> --
>
> ocamlfind ocamlopt -c -package result -package seq -bin-annot -no-alias-deps 
> -I . -alert -deprecated stdcompat__spacetime_s.mli -o 
> stdcompat__spacetime_s.cmi
> File "stdcompat__spacetime_s.mli", line 3, characters 16-32:
> 3 | module Series = Spacetime.Series
> 
> Error: Unbound module Spacetime
>
> This module was removed in OCaml commit
> 540996d21ee3793a1cecce252c81fb76a6b9fd61.
>
> --
>
> ocamlfind ocamlc -c -package result -package seq -bin-annot -no-alias-deps -I 
> . -alert -deprecated stdcompat__ephemeron.ml -o stdcompat__ephemeron.cmo
> File "stdcompat__ephemeron.ml", line 1:
> Error: The implementation stdcompat__ephemeron.ml
>does not match the interface stdcompat__ephemeron.cmi:
>...
>At position module type S = 
>Type declarations do not match:
>  type 'a t
>is not included in
>  type !'a t
>Their variances do not agree.
>File "hashtbl.mli", line 335, characters 4-14: Expected declaration
>File "stdcompat__ephemeron_s.mli", line 6, characters 4-13:
>  Actual declaration
>
> Not sure about this one but AFAICT cocci doesn't use this module.
>
> --
>
> I made a patch to workaround the issues in Fedora, but it's a pure hack:

Thanks for the feedback and the fix attempt.  I hope that this can be
fixed on our side shortly.

julia


>
>   https://src.fedoraproject.org/rpms/coccinelle/tree/rawhide
>
> Rich.
>
> --
> Richard Jones, Virtualization Group, Red Hat http://people.redhat.com/~rjones
> Read my programming and virtualization blog: http://rwmj.wordpress.com
> libguestfs lets you edit virtual machines.  Supports shell scripting,
> bindings from many languages.  http://libguestfs.org
>
> ___
> Cocci mailing list
> Cocci@systeme.lip6.fr
> https://systeme.lip6.fr/mailman/listinfo/cocci
>
___
Cocci mailing list
Cocci@systeme.lip6.fr
https://systeme.lip6.fr/mailman/listinfo/cocci


[Cocci] linux-kernel janitorial RFP: Mark static arrays as const

2021-03-02 Thread Joe Perches
Here is a possible opportunity to reduce data usage in the kernel.

$ git grep -P -n '^static\s+(?!const|struct)(?:\w+\s+){1,3}\w+\s*\[\s*\]' 
drivers/ | \
  grep -v __initdata | \
  wc -l
3250

Meaning there are ~3000 declarations of arrays with what appears to be
file static const content that are not marked const.

So there are many static arrays that could be marked const to move the
compiled object code from data to text minimizing the total amount of
exposed r/w data.

However, I do not know of a mechanism using coccinelle to determine
whether or not any of these static declarations are ever modified.

So it appears that each instance of these declarations might need
manual inspection.

But for arrays declared inside functions, it's much more likely that
the static declaration without const is done with the intent to modify
the array:

(note the difference in the git grep with a leading '^\s+')

$ git grep -Pn '^\s+static\s+(?!const|struct)(?:\w+\s+){1,3}\w+\s*\[\s*\]' 
drivers/ | \
  grep -v __initdata | \
  wc -l
323

- For instance: (head -10 of the git grep for file statics)

drivers/accessibility/speakup/keyhelp.c:18:static u_short masks[] = { 32, 16, 
8, 4, 2, 1 };
drivers/accessibility/speakup/keyhelp.c:26:static u_char funcvals[] = {
drivers/accessibility/speakup/main.c:2059:static spkup_hand spkup_handler[] = {
drivers/accessibility/speakup/speakup_acntpc.c:35:static unsigned int 
synth_portlist[] = { 0x2a8, 0 };
drivers/accessibility/speakup/speakup_decpc.c:133:static int synth_portlist[] = 
{ 0x340, 0x350, 0x240, 0x250, 0 };
drivers/accessibility/speakup/speakup_dectlk.c:110:static int ap_defaults[] = 
{122, 89, 155, 110, 208, 240, 200, 106, 306};
drivers/accessibility/speakup/speakup_dectlk.c:111:static int g5_defaults[] = 
{86, 81, 86, 84, 81, 80, 83, 83, 73};
drivers/accessibility/speakup/speakup_dtlk.c:34:static unsigned int 
synth_portlist[] = {
drivers/accessibility/speakup/speakup_keypc.c:34:static unsigned int 
synth_portlist[] = { 0x2a8, 0 };
drivers/acpi/ac.c:137:static enum power_supply_property ac_props[] = {

For drivers/accessibility/speakup/keyhelp.c:18:static u_short masks[] = { 32, 
16, 8, 4, 2, 1 };

masks is only used in static function say_key and should be const and
perhaps the declaration might be better moved into that function.

For drivers/accessibility/speakup/keyhelp.c:26:static u_char funcvals[] = {

funcvals is only used in static function spk_handle_help and should be const
and perhaps the declaration might be better moved into that function.

For drivers/accessibility/speakup/main.c:2059:static spkup_hand spkup_handler[] 
= {

spkup_handler is only used in static function do_spkup and should be const
and perhaps the declaration might be better moved into that function.

etc... for speakup

For drivers/acpi/ac.c:137:static enum power_supply_property ac_props[] = {

array ac_props is assigned as a reference in acpi_ac_add as a 
"const enum power_supply_property *" member of a struct power_supply_desc.

- For instance: (head -10 of the git grep for function statics)

drivers/acpi/apei/apei-base.c:781:  static u8 whea_uuid_str[] = 
"ed855e0c-6c90-47bf-a62a-26de0fc5ad5c";
drivers/block/amiflop.c:1051:   static unsigned char CRCTable1[] = {
drivers/block/amiflop.c:1070:   static unsigned char CRCTable2[] = {
drivers/block/drbd/drbd_nl.c:872:   static char units[] = { 'K', 'M', 'G', 
'T', 'P', 'E' };
drivers/block/drbd/drbd_proc.c:224: static char write_ordering_chars[] = {
drivers/block/drbd/drbd_receiver.c:4363:static enum drbd_conns c_tab[] 
= {
drivers/char/pcmcia/synclink_cs.c:3717: static unsigned char patterns[] =
drivers/cpufreq/intel_pstate.c:1515:static int silvermont_freq_table[] = {
drivers/cpufreq/intel_pstate.c:1530:static int airmont_freq_table[] = {
drivers/dma/xgene-dma.c:360:static u8 flyby_type[] = {

Some of these could be const, but some could not.  For instance:

For drivers/acpi/apei/apei-base.c:781:  static u8 whea_uuid_str[] = 
"ed855e0c-6c90-47bf-a62a-26de0fc5ad5c";

whea_uuid_str is assigned as a reference in "int apei_osc_setup(void)"
a struct acpi_osc_context where .uuid_str is not declared as const char *.




___
Cocci mailing list
Cocci@systeme.lip6.fr
https://systeme.lip6.fr/mailman/listinfo/cocci


Re: [Cocci] linux-kernel janitorial RFP: Mark static arrays as const

2021-03-02 Thread Julia Lawall



On Tue, 2 Mar 2021, Joe Perches wrote:

> Here is a possible opportunity to reduce data usage in the kernel.

Does it actually reduce data usage?

julia

>
> $ git grep -P -n '^static\s+(?!const|struct)(?:\w+\s+){1,3}\w+\s*\[\s*\]' 
> drivers/ | \
>   grep -v __initdata | \
>   wc -l
> 3250
>
> Meaning there are ~3000 declarations of arrays with what appears to be
> file static const content that are not marked const.
>
> So there are many static arrays that could be marked const to move the
> compiled object code from data to text minimizing the total amount of
> exposed r/w data.
>
> However, I do not know of a mechanism using coccinelle to determine
> whether or not any of these static declarations are ever modified.
>
> So it appears that each instance of these declarations might need
> manual inspection.
>
> But for arrays declared inside functions, it's much more likely that
> the static declaration without const is done with the intent to modify
> the array:
>
> (note the difference in the git grep with a leading '^\s+')
>
> $ git grep -Pn '^\s+static\s+(?!const|struct)(?:\w+\s+){1,3}\w+\s*\[\s*\]' 
> drivers/ | \
>   grep -v __initdata | \
>   wc -l
> 323
>
> - For instance: (head -10 of the git grep for file statics)
>
> drivers/accessibility/speakup/keyhelp.c:18:static u_short masks[] = { 32, 16, 
> 8, 4, 2, 1 };
> drivers/accessibility/speakup/keyhelp.c:26:static u_char funcvals[] = {
> drivers/accessibility/speakup/main.c:2059:static spkup_hand spkup_handler[] = 
> {
> drivers/accessibility/speakup/speakup_acntpc.c:35:static unsigned int 
> synth_portlist[] = { 0x2a8, 0 };
> drivers/accessibility/speakup/speakup_decpc.c:133:static int synth_portlist[] 
> = { 0x340, 0x350, 0x240, 0x250, 0 };
> drivers/accessibility/speakup/speakup_dectlk.c:110:static int ap_defaults[] = 
> {122, 89, 155, 110, 208, 240, 200, 106, 306};
> drivers/accessibility/speakup/speakup_dectlk.c:111:static int g5_defaults[] = 
> {86, 81, 86, 84, 81, 80, 83, 83, 73};
> drivers/accessibility/speakup/speakup_dtlk.c:34:static unsigned int 
> synth_portlist[] = {
> drivers/accessibility/speakup/speakup_keypc.c:34:static unsigned int 
> synth_portlist[] = { 0x2a8, 0 };
> drivers/acpi/ac.c:137:static enum power_supply_property ac_props[] = {
>
> For drivers/accessibility/speakup/keyhelp.c:18:static u_short masks[] = { 32, 
> 16, 8, 4, 2, 1 };
>
> masks is only used in static function say_key and should be const and
> perhaps the declaration might be better moved into that function.
>
> For drivers/accessibility/speakup/keyhelp.c:26:static u_char funcvals[] = {
>
> funcvals is only used in static function spk_handle_help and should be const
> and perhaps the declaration might be better moved into that function.
>
> For drivers/accessibility/speakup/main.c:2059:static spkup_hand 
> spkup_handler[] = {
>
> spkup_handler is only used in static function do_spkup and should be const
> and perhaps the declaration might be better moved into that function.
>
> etc... for speakup
>
> For drivers/acpi/ac.c:137:static enum power_supply_property ac_props[] = {
>
> array ac_props is assigned as a reference in acpi_ac_add as a
> "const enum power_supply_property *" member of a struct power_supply_desc.
>
> - For instance: (head -10 of the git grep for function statics)
>
> drivers/acpi/apei/apei-base.c:781:static u8 whea_uuid_str[] = 
> "ed855e0c-6c90-47bf-a62a-26de0fc5ad5c";
> drivers/block/amiflop.c:1051: static unsigned char CRCTable1[] = {
> drivers/block/amiflop.c:1070: static unsigned char CRCTable2[] = {
> drivers/block/drbd/drbd_nl.c:872: static char units[] = { 'K', 'M', 'G', 
> 'T', 'P', 'E' };
> drivers/block/drbd/drbd_proc.c:224:   static char write_ordering_chars[] = {
> drivers/block/drbd/drbd_receiver.c:4363:  static enum drbd_conns c_tab[] 
> = {
> drivers/char/pcmcia/synclink_cs.c:3717:   static unsigned char patterns[] 
> =
> drivers/cpufreq/intel_pstate.c:1515:  static int silvermont_freq_table[] = {
> drivers/cpufreq/intel_pstate.c:1530:  static int airmont_freq_table[] = {
> drivers/dma/xgene-dma.c:360:  static u8 flyby_type[] = {
>
> Some of these could be const, but some could not.  For instance:
>
> For drivers/acpi/apei/apei-base.c:781:static u8 whea_uuid_str[] = 
> "ed855e0c-6c90-47bf-a62a-26de0fc5ad5c";
>
> whea_uuid_str is assigned as a reference in "int apei_osc_setup(void)"
> a struct acpi_osc_context where .uuid_str is not declared as const char *.
>
>
>
>
> ___
> Cocci mailing list
> Cocci@systeme.lip6.fr
> https://systeme.lip6.fr/mailman/listinfo/cocci
>
___
Cocci mailing list
Cocci@systeme.lip6.fr
https://systeme.lip6.fr/mailman/listinfo/cocci