All of lore.kernel.org
 help / color / mirror / Atom feed
* [Cocci] [cocci-bug] coccinelle 1.0.6: OpenMP #pragma directive leads to function ignore
@ 2018-04-26  8:12 Michele Martone
  2018-04-26  8:25 ` Julia Lawall
  0 siblings, 1 reply; 12+ messages in thread
From: Michele Martone @ 2018-04-26  8:12 UTC (permalink / raw)
  To: cocci

Dear Prof. Lawall and Coccinelle team,

I'm an enthusiastical, however still beginner use of Coccinelle.

While running spatch 1.0.6 on a long OpenMP-enabled listing, I
noticed that the presence of the C line:
 #pragma omp parallel for reduction(+:I) private(I)
seems to prevent restructuring of the function containing it.
If I simplify the pragma to something like
 #pragma omp parallel
the problem disappears.

Is there anything I can do to restructure large codes containing
many of such similar lines ?

In the attachment you find a test case and the output I experience.

Best regards,
Michele
-------------- next part --------------
+ spatch --version
spatch version 1.0.6 compiled with OCaml version 4.05.0
Flags passed to the configure script: --host=i586-suse-linux-gnu --build=i586-suse-linux-gnu --program-prefix= --disable-dependency-tracking --prefix=/usr --exec-prefix=/usr --bindir=/usr/bin --sbindir=/usr/sbin --sysconfdir=/etc --datadir=/usr/share --includedir=/usr/include --libdir=/usr/lib --libexecdir=/usr/lib --localstatedir=/var --sharedstatedir=/var/lib --mandir=/usr/share/man --infodir=/usr/share/info --disable-dependency-tracking
Python scripting support: yes
Syntax of regular expresssions: PCRE
+ sed -i 's/^...pragma/#pragma  /g' pragma_ignored.c
+ cat pragma_ignored.c
void good(void)
{
 A[I]; /* not ignored */
}
void bad(void)
{
 A[I]; /* if pragma uncommented ignored by spatch 1.0.6  */
#pragma   omp parallel for reduction(+:I) private(I)
}
+ spatch --sp-file pragma_ignored.cocci pragma_ignored.c
init_defs_builtins: /usr/lib/coccinelle/standard.h
HANDLING: pragma_ignored.c
diff = 
--- pragma_ignored.c
+++ /tmp/di36pef/cocci-output-200330-4f22e8-pragma_ignored.c
@@ -1,6 +1,6 @@
 void good(void)
 {
- A[I]; /* not ignored */
+ A[J]; /* not ignored */
 }
 void bad(void)
 {
+ sed -i 's/^.pragma  /\/\/#pragma/g' pragma_ignored.c
+ cat pragma_ignored.c
void good(void)
{
 A[I]; /* not ignored */
}
void bad(void)
{
 A[I]; /* if pragma uncommented ignored by spatch 1.0.6  */
//#pragma omp parallel for reduction(+:I) private(I)
}
+ spatch --sp-file pragma_ignored.cocci pragma_ignored.c
init_defs_builtins: /usr/lib/coccinelle/standard.h
HANDLING: pragma_ignored.c
diff = 
--- pragma_ignored.c
+++ /tmp/di36pef/cocci-output-200335-2965e3-pragma_ignored.c
@@ -1,9 +1,9 @@
 void good(void)
 {
- A[I]; /* not ignored */
+ A[J]; /* not ignored */
 }
 void bad(void)
 {
- A[I]; /* if pragma uncommented ignored by spatch 1.0.6  */
+ A[J]; /* if pragma uncommented ignored by spatch 1.0.6  */
 //#pragma omp parallel for reduction(+:I) private(I)
 }
-------------- next part --------------
A non-text attachment was scrubbed...
Name: pragma_ignored.sh
Type: application/x-sh
Size: 345 bytes
Desc: not available
URL: <https://systeme.lip6.fr/pipermail/cocci/attachments/20180426/bb9498f0/attachment.sh>
-------------- next part --------------
void good(void)
{
 A[I]; /* not ignored */
}
void bad(void)
{
 A[I]; /* if pragma uncommented ignored by spatch 1.0.6  */
//#pragma omp parallel for reduction(+:I) private(I)
}
-------------- next part --------------
// pragma_ignored.cocci
// 
// $ spatch --version
// spatch version 1.0.6 compiled with OCaml version 4.05.0
// Flags passed to the configure script: --host=i586-suse-linux-gnu --build=i586-suse-linux-gnu --program-prefix= --disable-dependency-tracking --prefix=/usr --exec-prefix=/usr --bindir=/usr/bin --sbindir=/usr/sbin --sysconfdir=/etc --datadir=/usr/share --includedir=/usr/include --libdir=/usr/lib --libexecdir=/usr/lib --localstatedir=/var --sharedstatedir=/var/lib --mandir=/usr/share/man --infodir=/usr/share/info --disable-dependency-tracking
// Python scripting support: yes
// Syntax of regular expresssions: PCRE
// 
// 
// $ spatch --sp-file pragma_ignored.cocci  pragma_i
// 
// @@ -1,9 +1,9 @@
//  void good(void)
//  {
// - A[I]; /* not ignored */
// + A[J]; /* not ignored */
//  }
//  void bad(void)
//  {
// - A[I]; /* if pragma uncommented ignored by spatch 1.0.6  */
// + A[J]; /* if pragma uncommented ignored by spatch 1.0.6  */
//  //#pragma omp parallel for reduction(+:I) private(I)
//  }
// 
@@
symbol A,I,J;
@@

-A[I]
+A[J]

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

* [Cocci] [cocci-bug] coccinelle 1.0.6: OpenMP #pragma directive leads to function ignore
  2018-04-26  8:12 [Cocci] [cocci-bug] coccinelle 1.0.6: OpenMP #pragma directive leads to function ignore Michele Martone
@ 2018-04-26  8:25 ` Julia Lawall
  2018-04-26 10:21   ` Michele Martone
  2018-04-26 13:01   ` [Cocci] Coccinelle " SF Markus Elfring
  0 siblings, 2 replies; 12+ messages in thread
From: Julia Lawall @ 2018-04-26  8:25 UTC (permalink / raw)
  To: cocci



On Thu, 26 Apr 2018, Michele Martone wrote:

> Dear Prof. Lawall and Coccinelle team,
>
> I'm an enthusiastical, however still beginner use of Coccinelle.
>
> While running spatch 1.0.6 on a long OpenMP-enabled listing, I
> noticed that the presence of the C line:
>  #pragma omp parallel for reduction(+:I) private(I)
> seems to prevent restructuring of the function containing it.
> If I simplify the pragma to something like
>  #pragma omp parallel
> the problem disappears.
>
> Is there anything I can do to restructure large codes containing
> many of such similar lines ?
>
> In the attachment you find a test case and the output I experience.

Thanks for the report.  We can try to make the parsing of #pragmas more
flexible.

julia

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

* [Cocci] [cocci-bug] coccinelle 1.0.6: OpenMP #pragma directive leads to function ignore
  2018-04-26  8:25 ` Julia Lawall
@ 2018-04-26 10:21   ` Michele Martone
  2018-04-26 10:22     ` Julia Lawall
  2018-04-30  6:43     ` Julia Lawall
  2018-04-26 13:01   ` [Cocci] Coccinelle " SF Markus Elfring
  1 sibling, 2 replies; 12+ messages in thread
From: Michele Martone @ 2018-04-26 10:21 UTC (permalink / raw)
  To: cocci

On 20180426 at 09:25, Julia Lawall wrote:
> On Thu, 26 Apr 2018, Michele Martone wrote:
> 
> > Dear Prof. Lawall and Coccinelle team,
> >
> > I'm an enthusiastical, however still beginner use of Coccinelle.
> >
> > While running spatch 1.0.6 on a long OpenMP-enabled listing, I
> > noticed that the presence of the C line:
> >  #pragma omp parallel for reduction(+:I) private(I)
> > seems to prevent restructuring of the function containing it.
> > If I simplify the pragma to something like
> >  #pragma omp parallel
> > the problem disappears.
> >
> > Is there anything I can do to restructure large codes containing
> > many of such similar lines ?
> >
> > In the attachment you find a test case and the output I experience.
> 
> Thanks for the report.  We can try to make the parsing of #pragmas more
> flexible.
> 
> julia

Dear Julia,

thanks for the quick response!

I'll be waiting for Coccinelle-sided developments then.

May I ask what would you recommend now to circumvent this ?

>From the SmPL v1.0.6 Grammar I am not aware of any way to
e.g. ignore pragma lines as they were comments.

So the best what comes to my mind is to:

 - comment #pragma lines
 - compute semantic patch
 - apply   semantic patch
 - uncomment #pragma lines

If there is any better solution, please let me know.

Thanks,
Michele

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

* [Cocci] [cocci-bug] coccinelle 1.0.6: OpenMP #pragma directive leads to function ignore
  2018-04-26 10:21   ` Michele Martone
@ 2018-04-26 10:22     ` Julia Lawall
  2018-04-30  6:43     ` Julia Lawall
  1 sibling, 0 replies; 12+ messages in thread
From: Julia Lawall @ 2018-04-26 10:22 UTC (permalink / raw)
  To: cocci



On Thu, 26 Apr 2018, Michele Martone wrote:

> On 20180426 at 09:25, Julia Lawall wrote:
> > On Thu, 26 Apr 2018, Michele Martone wrote:
> >
> > > Dear Prof. Lawall and Coccinelle team,
> > >
> > > I'm an enthusiastical, however still beginner use of Coccinelle.
> > >
> > > While running spatch 1.0.6 on a long OpenMP-enabled listing, I
> > > noticed that the presence of the C line:
> > >  #pragma omp parallel for reduction(+:I) private(I)
> > > seems to prevent restructuring of the function containing it.
> > > If I simplify the pragma to something like
> > >  #pragma omp parallel
> > > the problem disappears.
> > >
> > > Is there anything I can do to restructure large codes containing
> > > many of such similar lines ?
> > >
> > > In the attachment you find a test case and the output I experience.
> >
> > Thanks for the report.  We can try to make the parsing of #pragmas more
> > flexible.
> >
> > julia
>
> Dear Julia,
>
> thanks for the quick response!
>
> I'll be waiting for Coccinelle-sided developments then.
>
> May I ask what would you recommend now to circumvent this ?
>
> From the SmPL v1.0.6 Grammar I am not aware of any way to
> e.g. ignore pragma lines as they were comments.
>
> So the best what comes to my mind is to:
>
>  - comment #pragma lines
>  - compute semantic patch
>  - apply   semantic patch
>  - uncomment #pragma lines
>
> If there is any better solution, please let me know.

I don't see any other solution, sorry.  For some other parsing issues, it
might be possible to define a macro, but that is not possible here.

julia

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

* [Cocci] Coccinelle 1.0.6: OpenMP #pragma directive leads to function ignore
  2018-04-26  8:25 ` Julia Lawall
  2018-04-26 10:21   ` Michele Martone
@ 2018-04-26 13:01   ` SF Markus Elfring
  1 sibling, 0 replies; 12+ messages in thread
From: SF Markus Elfring @ 2018-04-26 13:01 UTC (permalink / raw)
  To: cocci

> We can try to make the parsing of #pragmas more flexible.

I am also curious on further software evolution in this area for a while.
https://github.com/coccinelle/coccinelle/issues/51

Regards,
Markus

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

* [Cocci] [cocci-bug] coccinelle 1.0.6: OpenMP #pragma directive leads to function ignore
  2018-04-26 10:21   ` Michele Martone
  2018-04-26 10:22     ` Julia Lawall
@ 2018-04-30  6:43     ` Julia Lawall
  2018-04-30  7:39       ` Michele Martone
  1 sibling, 1 reply; 12+ messages in thread
From: Julia Lawall @ 2018-04-30  6:43 UTC (permalink / raw)
  To: cocci



On Thu, 26 Apr 2018, Michele Martone wrote:

> On 20180426 at 09:25, Julia Lawall wrote:
> > On Thu, 26 Apr 2018, Michele Martone wrote:
> >
> > > Dear Prof. Lawall and Coccinelle team,
> > >
> > > I'm an enthusiastical, however still beginner use of Coccinelle.
> > >
> > > While running spatch 1.0.6 on a long OpenMP-enabled listing, I
> > > noticed that the presence of the C line:
> > >  #pragma omp parallel for reduction(+:I) private(I)
> > > seems to prevent restructuring of the function containing it.
> > > If I simplify the pragma to something like
> > >  #pragma omp parallel
> > > the problem disappears.
> > >
> > > Is there anything I can do to restructure large codes containing
> > > many of such similar lines ?
> > >
> > > In the attachment you find a test case and the output I experience.
> >
> > Thanks for the report.  We can try to make the parsing of #pragmas more
> > flexible.
> >
> > julia
>
> Dear Julia,
>
> thanks for the quick response!
>
> I'll be waiting for Coccinelle-sided developments then.
>
> May I ask what would you recommend now to circumvent this ?
>
> From the SmPL v1.0.6 Grammar I am not aware of any way to
> e.g. ignore pragma lines as they were comments.
>
> So the best what comes to my mind is to:
>
>  - comment #pragma lines
>  - compute semantic patch
>  - apply   semantic patch
>  - uncomment #pragma lines
>
> If there is any better solution, please let me know.

The problem is now fixed in the github version of Coccinelle.

julia

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

* [Cocci] [cocci-bug] coccinelle 1.0.6: OpenMP #pragma directive leads to function ignore
  2018-04-30  6:43     ` Julia Lawall
@ 2018-04-30  7:39       ` Michele Martone
  2018-04-30  7:42         ` Julia Lawall
  2018-04-30  7:44         ` Peter Senna Tschudin
  0 siblings, 2 replies; 12+ messages in thread
From: Michele Martone @ 2018-04-30  7:39 UTC (permalink / raw)
  To: cocci

On 20180430 at 08:43, Julia Lawall wrote:
> On Thu, 26 Apr 2018, Michele Martone wrote:
> 
> > On 20180426 at 09:25, Julia Lawall wrote:
> > > On Thu, 26 Apr 2018, Michele Martone wrote:
> > >
> > > > Dear Prof. Lawall and Coccinelle team,
> > > >
> > > > I'm an enthusiastical, however still beginner use of Coccinelle.
> > > >
> > > > While running spatch 1.0.6 on a long OpenMP-enabled listing, I
> > > > noticed that the presence of the C line:
> > > >  #pragma omp parallel for reduction(+:I) private(I)
> > > > seems to prevent restructuring of the function containing it.
> > > > If I simplify the pragma to something like
> > > >  #pragma omp parallel
> > > > the problem disappears.
> > > >
> > > > Is there anything I can do to restructure large codes containing
> > > > many of such similar lines ?
> > > >
> > > > In the attachment you find a test case and the output I experience.
> > >
> > > Thanks for the report.  We can try to make the parsing of #pragmas more
> > > flexible.
> > >
> > > julia
> >
> > Dear Julia,
> >
> > thanks for the quick response!
> >
> > I'll be waiting for Coccinelle-sided developments then.
> >
> > May I ask what would you recommend now to circumvent this ?
> >
> > From the SmPL v1.0.6 Grammar I am not aware of any way to
> > e.g. ignore pragma lines as they were comments.
> >
> > So the best what comes to my mind is to:
> >
> >  - comment #pragma lines
> >  - compute semantic patch
> >  - apply   semantic patch
> >  - uncomment #pragma lines
> >
> > If there is any better solution, please let me know.
> 
> The problem is now fixed in the github version of Coccinelle.
> 
> julia

That is good news -- thank you :-)

Handling such pragma lines opens new ranges of use for Coccinelle!

On my side, I just followed install.txt:

#!/bin/bash
set -e
set -x
trap "read" EXIT # will block for input on error
git clone https://github.com/coccinelle/coccinelle.git
cd coccinelle
./autogen
./configure 
make # it stops here
# make install

and it reaches:

...
OCAMLOPT  enter.ml
OCAMLC    main.mli
OCAMLOPT  main.ml
OCAMLOPT  -o spatch.opt
/usr/lib64/ocaml/libbigarray.a(bigarray_stubs.o): In function `caml_ba_deserialize':
/home/abuild/rpmbuild/BUILD/ocaml-4.03.0/otherlibs/bigarray/bigarray_stubs.c:979: undefined reference to `caml_umul_overflow'
/home/abuild/rpmbuild/BUILD/ocaml-4.03.0/otherlibs/bigarray/bigarray_stubs.c:985: undefined reference to `caml_umul_overflow'
collect2: error: ld returned 1 exit status
File "caml_startup", line 1:
Error: Error during linking
Makefile:609: recipe for target 'spatch.opt' failed
make: *** [spatch.opt] Error 2
rm parsing_cocci/lexer_cli.ml parsing_cocci/parser_cocci_menhir.ml.d parsing_cocci/parser_cocci_menhir.mli.d parsing_cocci/lexer_script.ml parsing_cocci/lexer_cocci.ml parsing_c/lexer_c.ml
+ read

It's my first experience building any ocaml-based software, so 
I would appreciate any hint how to proceed further, if possible.

Michele

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

* [Cocci] [cocci-bug] coccinelle 1.0.6: OpenMP #pragma directive leads to function ignore
  2018-04-30  7:39       ` Michele Martone
@ 2018-04-30  7:42         ` Julia Lawall
  2018-04-30  7:47           ` Michele Martone
  2018-04-30  7:44         ` Peter Senna Tschudin
  1 sibling, 1 reply; 12+ messages in thread
From: Julia Lawall @ 2018-04-30  7:42 UTC (permalink / raw)
  To: cocci



On Mon, 30 Apr 2018, Michele Martone wrote:

> On 20180430 at 08:43, Julia Lawall wrote:
> > On Thu, 26 Apr 2018, Michele Martone wrote:
> >
> > > On 20180426 at 09:25, Julia Lawall wrote:
> > > > On Thu, 26 Apr 2018, Michele Martone wrote:
> > > >
> > > > > Dear Prof. Lawall and Coccinelle team,
> > > > >
> > > > > I'm an enthusiastical, however still beginner use of Coccinelle.
> > > > >
> > > > > While running spatch 1.0.6 on a long OpenMP-enabled listing, I
> > > > > noticed that the presence of the C line:
> > > > >  #pragma omp parallel for reduction(+:I) private(I)
> > > > > seems to prevent restructuring of the function containing it.
> > > > > If I simplify the pragma to something like
> > > > >  #pragma omp parallel
> > > > > the problem disappears.
> > > > >
> > > > > Is there anything I can do to restructure large codes containing
> > > > > many of such similar lines ?
> > > > >
> > > > > In the attachment you find a test case and the output I experience.
> > > >
> > > > Thanks for the report.  We can try to make the parsing of #pragmas more
> > > > flexible.
> > > >
> > > > julia
> > >
> > > Dear Julia,
> > >
> > > thanks for the quick response!
> > >
> > > I'll be waiting for Coccinelle-sided developments then.
> > >
> > > May I ask what would you recommend now to circumvent this ?
> > >
> > > From the SmPL v1.0.6 Grammar I am not aware of any way to
> > > e.g. ignore pragma lines as they were comments.
> > >
> > > So the best what comes to my mind is to:
> > >
> > >  - comment #pragma lines
> > >  - compute semantic patch
> > >  - apply   semantic patch
> > >  - uncomment #pragma lines
> > >
> > > If there is any better solution, please let me know.
> >
> > The problem is now fixed in the github version of Coccinelle.
> >
> > julia
>
> That is good news -- thank you :-)
>
> Handling such pragma lines opens new ranges of use for Coccinelle!
>
> On my side, I just followed install.txt:
>
> #!/bin/bash
> set -e
> set -x
> trap "read" EXIT # will block for input on error
> git clone https://github.com/coccinelle/coccinelle.git
> cd coccinelle
> ./autogen
> ./configure
> make # it stops here
> # make install
>
> and it reaches:
>
> ...
> OCAMLOPT  enter.ml
> OCAMLC    main.mli
> OCAMLOPT  main.ml
> OCAMLOPT  -o spatch.opt
> /usr/lib64/ocaml/libbigarray.a(bigarray_stubs.o): In function `caml_ba_deserialize':
> /home/abuild/rpmbuild/BUILD/ocaml-4.03.0/otherlibs/bigarray/bigarray_stubs.c:979: undefined reference to `caml_umul_overflow'
> /home/abuild/rpmbuild/BUILD/ocaml-4.03.0/otherlibs/bigarray/bigarray_stubs.c:985: undefined reference to `caml_umul_overflow'
> collect2: error: ld returned 1 exit status
> File "caml_startup", line 1:
> Error: Error during linking
> Makefile:609: recipe for target 'spatch.opt' failed
> make: *** [spatch.opt] Error 2
> rm parsing_cocci/lexer_cli.ml parsing_cocci/parser_cocci_menhir.ml.d parsing_cocci/parser_cocci_menhir.mli.d parsing_cocci/lexer_script.ml parsing_cocci/lexer_cocci.ml parsing_c/lexer_c.ml
> + read
>
> It's my first experience building any ocaml-based software, so
> I would appreciate any hint how to proceed further, if possible.

Oops, I'll forward this to my engineer, who knows about building issues.
I'm not sure if he will answer before Wednesday, due to the holiday.
What is your OS?

julia

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

* [Cocci] [cocci-bug] coccinelle 1.0.6: OpenMP #pragma directive leads to function ignore
  2018-04-30  7:39       ` Michele Martone
  2018-04-30  7:42         ` Julia Lawall
@ 2018-04-30  7:44         ` Peter Senna Tschudin
  2018-05-02 13:16           ` Michele Martone
  1 sibling, 1 reply; 12+ messages in thread
From: Peter Senna Tschudin @ 2018-04-30  7:44 UTC (permalink / raw)
  To: cocci

[...]

> #!/bin/bash
> set -e
> set -x
> trap "read" EXIT # will block for input on error
> git clone https://github.com/coccinelle/coccinelle.git
> cd coccinelle
> ./autogen
> ./configure
> make # it stops here
> # make install
>
> and it reaches:
>
> ...
> OCAMLOPT  enter.ml
> OCAMLC    main.mli
> OCAMLOPT  main.ml
> OCAMLOPT  -o spatch.opt
> /usr/lib64/ocaml/libbigarray.a(bigarray_stubs.o): In function `caml_ba_deserialize':
> /home/abuild/rpmbuild/BUILD/ocaml-4.03.0/otherlibs/bigarray/bigarray_stubs.c:979: undefined reference to `caml_umul_overflow'
> /home/abuild/rpmbuild/BUILD/ocaml-4.03.0/otherlibs/bigarray/bigarray_stubs.c:985: undefined reference to `caml_umul_overflow'
> collect2: error: ld returned 1 exit status
> File "caml_startup", line 1:
> Error: Error during linking
> Makefile:609: recipe for target 'spatch.opt' failed
> make: *** [spatch.opt] Error 2
> rm parsing_cocci/lexer_cli.ml parsing_cocci/parser_cocci_menhir.ml.d parsing_cocci/parser_cocci_menhir.mli.d parsing_cocci/lexer_script.ml parsing_cocci/lexer_cocci.ml parsing_c/lexer_c.ml
> + read

I usually ask the package manager to install build dependencies for me:

Fedora:
$ sudo dnf builddep coccinelle

Ubuntu/Debian:
$ sudo apt-get build-dep coccinelle

[...]


-- 
Peter

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

* [Cocci] [cocci-bug] coccinelle 1.0.6: OpenMP #pragma directive leads to function ignore
  2018-04-30  7:42         ` Julia Lawall
@ 2018-04-30  7:47           ` Michele Martone
  0 siblings, 0 replies; 12+ messages in thread
From: Michele Martone @ 2018-04-30  7:47 UTC (permalink / raw)
  To: cocci

On 20180430 at 09:42, Julia Lawall wrote:
> 
> 
> On Mon, 30 Apr 2018, Michele Martone wrote:
> 
> > On 20180430 at 08:43, Julia Lawall wrote:
> > > On Thu, 26 Apr 2018, Michele Martone wrote:
> > >
> > > > On 20180426 at 09:25, Julia Lawall wrote:
> > > > > On Thu, 26 Apr 2018, Michele Martone wrote:
> > > > >
> > > > > > Dear Prof. Lawall and Coccinelle team,
> > > > > >
> > > > > > I'm an enthusiastical, however still beginner use of Coccinelle.
> > > > > >
> > > > > > While running spatch 1.0.6 on a long OpenMP-enabled listing, I
> > > > > > noticed that the presence of the C line:
> > > > > >  #pragma omp parallel for reduction(+:I) private(I)
> > > > > > seems to prevent restructuring of the function containing it.
> > > > > > If I simplify the pragma to something like
> > > > > >  #pragma omp parallel
> > > > > > the problem disappears.
> > > > > >
> > > > > > Is there anything I can do to restructure large codes containing
> > > > > > many of such similar lines ?
> > > > > >
> > > > > > In the attachment you find a test case and the output I experience.
> > > > >
> > > > > Thanks for the report.  We can try to make the parsing of #pragmas more
> > > > > flexible.
> > > > >
> > > > > julia
> > > >
> > > > Dear Julia,
> > > >
> > > > thanks for the quick response!
> > > >
> > > > I'll be waiting for Coccinelle-sided developments then.
> > > >
> > > > May I ask what would you recommend now to circumvent this ?
> > > >
> > > > From the SmPL v1.0.6 Grammar I am not aware of any way to
> > > > e.g. ignore pragma lines as they were comments.
> > > >
> > > > So the best what comes to my mind is to:
> > > >
> > > >  - comment #pragma lines
> > > >  - compute semantic patch
> > > >  - apply   semantic patch
> > > >  - uncomment #pragma lines
> > > >
> > > > If there is any better solution, please let me know.
> > >
> > > The problem is now fixed in the github version of Coccinelle.
> > >
> > > julia
> >
> > That is good news -- thank you :-)
> >
> > Handling such pragma lines opens new ranges of use for Coccinelle!
> >
> > On my side, I just followed install.txt:
> >
> > #!/bin/bash
> > set -e
> > set -x
> > trap "read" EXIT # will block for input on error
> > git clone https://github.com/coccinelle/coccinelle.git
> > cd coccinelle
> > ./autogen
> > ./configure
> > make # it stops here
> > # make install
> >
> > and it reaches:
> >
> > ...
> > OCAMLOPT  enter.ml
> > OCAMLC    main.mli
> > OCAMLOPT  main.ml
> > OCAMLOPT  -o spatch.opt
> > /usr/lib64/ocaml/libbigarray.a(bigarray_stubs.o): In function `caml_ba_deserialize':
> > /home/abuild/rpmbuild/BUILD/ocaml-4.03.0/otherlibs/bigarray/bigarray_stubs.c:979: undefined reference to `caml_umul_overflow'
> > /home/abuild/rpmbuild/BUILD/ocaml-4.03.0/otherlibs/bigarray/bigarray_stubs.c:985: undefined reference to `caml_umul_overflow'
> > collect2: error: ld returned 1 exit status
> > File "caml_startup", line 1:
> > Error: Error during linking
> > Makefile:609: recipe for target 'spatch.opt' failed
> > make: *** [spatch.opt] Error 2
> > rm parsing_cocci/lexer_cli.ml parsing_cocci/parser_cocci_menhir.ml.d parsing_cocci/parser_cocci_menhir.mli.d parsing_cocci/lexer_script.ml parsing_cocci/lexer_cocci.ml parsing_c/lexer_c.ml
> > + read
> >
> > It's my first experience building any ocaml-based software, so
> > I would appreciate any hint how to proceed further, if possible.
> 
> Oops, I'll forward this to my engineer, who knows about building issues.
> I'm not sure if he will answer before Wednesday, due to the holiday.
> What is your OS?

 $ cat /etc/os-release 
 NAME="openSUSE Leap"
 VERSION="42.3"
 ID=opensuse
 ID_LIKE="suse"
 VERSION_ID="42.3"
 PRETTY_NAME="openSUSE Leap 42.3"
 ANSI_COLOR="0;32"
 CPE_NAME="cpe:/o:opensuse:leap:42.3"

thanks!

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

* [Cocci] [cocci-bug] coccinelle 1.0.6: OpenMP #pragma directive leads to function ignore
  2018-04-30  7:44         ` Peter Senna Tschudin
@ 2018-05-02 13:16           ` Michele Martone
  2018-05-25 13:56             ` Michele Martone
  0 siblings, 1 reply; 12+ messages in thread
From: Michele Martone @ 2018-05-02 13:16 UTC (permalink / raw)
  To: cocci

On 20180430 at 09:44, Peter Senna Tschudin wrote:
> [...]
> 
> > #!/bin/bash
> > set -e
> > set -x
> > trap "read" EXIT # will block for input on error
> > git clone https://github.com/coccinelle/coccinelle.git
> > cd coccinelle
> > ./autogen
> > ./configure
> > make # it stops here
> > # make install
> >
> > and it reaches:
> >
> > ...
> > OCAMLOPT  enter.ml
> > OCAMLC    main.mli
> > OCAMLOPT  main.ml
> > OCAMLOPT  -o spatch.opt
> > /usr/lib64/ocaml/libbigarray.a(bigarray_stubs.o): In function `caml_ba_deserialize':
> > /home/abuild/rpmbuild/BUILD/ocaml-4.03.0/otherlibs/bigarray/bigarray_stubs.c:979: undefined reference to `caml_umul_overflow'
> > /home/abuild/rpmbuild/BUILD/ocaml-4.03.0/otherlibs/bigarray/bigarray_stubs.c:985: undefined reference to `caml_umul_overflow'
> > collect2: error: ld returned 1 exit status
> > File "caml_startup", line 1:
> > Error: Error during linking
> > Makefile:609: recipe for target 'spatch.opt' failed
> > make: *** [spatch.opt] Error 2
> > rm parsing_cocci/lexer_cli.ml parsing_cocci/parser_cocci_menhir.ml.d parsing_cocci/parser_cocci_menhir.mli.d parsing_cocci/lexer_script.ml parsing_cocci/lexer_cocci.ml parsing_c/lexer_c.ml
> > + read
> 
> I usually ask the package manager to install build dependencies for me:
> 
> Fedora:
> $ sudo dnf builddep coccinelle
> 
> Ubuntu/Debian:
> $ sudo apt-get build-dep coccinelle
> 
> [...]

Dear Peter, thanks for the apt-get based recipe,  
it worked for me on debian buster with ocaml-4.0.5.

Dear Julia, thanks for the pragma patch which will
enable coccinelle to support OpenMP-enabled listings
too (I just tested it on the above setup) :-)

Michele

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

* [Cocci] [cocci-bug] coccinelle 1.0.6: OpenMP #pragma directive leads to function ignore
  2018-05-02 13:16           ` Michele Martone
@ 2018-05-25 13:56             ` Michele Martone
  0 siblings, 0 replies; 12+ messages in thread
From: Michele Martone @ 2018-05-25 13:56 UTC (permalink / raw)
  To: cocci

On 20180502 at 15:16, Michele Martone wrote:
> On 20180430 at 09:44, Peter Senna Tschudin wrote:
> > ... 
> Dear Peter, thanks for the apt-get based recipe,  
> it worked for me on debian buster with ocaml-4.0.5.
> 
> Dear Julia, thanks for the pragma patch which will
> enable coccinelle to support OpenMP-enabled listings
> too (I just tested it on the above setup) :-)
> 
> Michele

Dear Julia,

I have another similar minimal test spatch case failing, attached.
It seems like using
 #pragma omp parallel for private(I)
breaks the semantic patch, while having 
 #pragma omp parallel for 
is still ok.
Please see attachment.

I'm using self-built ocaml (e407ecf11 2018-05-25)
and coccinelle (a4532f08 2018-05-17).

would be very useful to have full #pragma resilience!

Michele
-------------- next part --------------
// seems like this example breaks:
// spatch version 1.0.6-00440-ga4532f08 compiled with OCaml version 4.08.0+dev0-2018-04-09
// (a4532f08 2018-05-17)

/*
pragma_ignored_again.cocci:

@@
symbol A,I,J;
@@

-A[I]
+A[J]
*/
void f(void)
{
	int*A=NULL,I=0;
// pragma presence breaks semantic patch (remote private(i) to 'fix' it)
// comment it to have A[I] -> A[J]
#pragma omp parallel for private(I)
	A[I]++;
}

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

end of thread, other threads:[~2018-05-25 13:56 UTC | newest]

Thread overview: 12+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2018-04-26  8:12 [Cocci] [cocci-bug] coccinelle 1.0.6: OpenMP #pragma directive leads to function ignore Michele Martone
2018-04-26  8:25 ` Julia Lawall
2018-04-26 10:21   ` Michele Martone
2018-04-26 10:22     ` Julia Lawall
2018-04-30  6:43     ` Julia Lawall
2018-04-30  7:39       ` Michele Martone
2018-04-30  7:42         ` Julia Lawall
2018-04-30  7:47           ` Michele Martone
2018-04-30  7:44         ` Peter Senna Tschudin
2018-05-02 13:16           ` Michele Martone
2018-05-25 13:56             ` Michele Martone
2018-04-26 13:01   ` [Cocci] Coccinelle " SF Markus Elfring

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.