Hello,

I became interested in another source code transformation again.
I would like to move a bit of common code to the end of a function 
implementation
with the help of the following script for the semantic patch language.


@replacement@
expression info, result;
identifier target, work;
type t != void;
@@
 t work(...)
 {
 <+...
 if (...)
(
-{
-result = info;
 goto
-     target
+     e_nodev
 ;
-}
|
 {
 ...
-result = info;
 goto
-     target
+     e_nodev
 ;
 }
)
 ...+>
target:
 ...
 return result;
+e_nodev:
+result = info;
+goto target;
 }


The implementation of the function “megasas_mgmt_ioctl_fw” looks like
an update candidate.
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/drivers/scsi/megaraid/megaraid_sas_base.c?id=4ae004a9bca8bef118c2b4e76ee31c7df4514f18#n7742
https://elixir.bootlin.com/linux/v5.2-rc5/source/drivers/scsi/megaraid/megaraid_sas_base.c#L7742

* I extracted it into a test source file.
  Unfortunately, I stumble on the error message “replacement: already tagged 
token:
  C code context” then.

* If I delete a bit more source code for this example, the shown transformation
  approach can work as expected.

* The complete source file seems to be very challenging for testing
  the run time characteristics.


Regards,
Markus
_______________________________________________
Cocci mailing list
Cocci@systeme.lip6.fr
https://systeme.lip6.fr/mailman/listinfo/cocci

Reply via email to