Given source input:

$ cat t.c
#include <linux/kernel.h>
#include <linux/ioport.h>

struct resource array[] = {
        {.start = 0x11111, .end=0x22222},
        {.start = 0x33333, .end=0x44444},
        {.start = 0x55555, .end=0x66666},
};
struct resource *p = array;

void test_resource(void)
{
        int i;
        for (i = 0; i < ARRAY_SIZE(array); i++)
                if (p[i].end - p[i].start + 1 > 0x12345)
                        printk(KERN_CRIT "Some failure\n");
}
$ 

and spatch input:

$ cat resource.cocci
@@
struct resource *ptr;
@@

- ptr->end - ptr->start + 1
+ resource_size(ptr)
$ 

and 

$ spatch -version
spatch version 1.0.0-rc3 with Python support
$

spatch incorrrectly produces:

$ spatch -very_quiet -sp_file resource.cocci t.c
--- t.c 2011-06-06 18:09:58.948214792 -0700
+++ /tmp/cocci-output-27700-056d06-t.c  2011-06-06 18:13:25.324214761
-0700
@@ -13,6 +13,6 @@ void test_resource(void)
 {
        int i;
        for (i = 0; i < ARRAY_SIZE(array); i++)
-               if (p[i].end - p[i].start + 1 > 0x12345)
+               if (resource_size(p) > 0x12345)
                        printk(KERN_CRIT "Some failure\n");
 }
$ 

I believe transform should be to:

+               if (resource_size(&p[i]) > 0x12345)


_______________________________________________
Cocci mailing list
[email protected]
http://lists.diku.dk/mailman/listinfo/cocci
(Web access from inside DIKUs LAN only)

Reply via email to