All of lore.kernel.org
 help / color / mirror / Atom feed
* [Cocci] false positive match with ternary operator?
@ 2016-02-17 16:06 Wolfram Sang
  2016-02-17 16:13 ` Julia Lawall
  0 siblings, 1 reply; 2+ messages in thread
From: Wolfram Sang @ 2016-02-17 16:06 UTC (permalink / raw)
  To: cocci

So, I'll try again ;) This spatch:

@@
identifier match;
expression table, dev;
type T;
@@
-	T match = of_match_device(table, dev);
	... when != match
-	match->data
+	of_device_get_match_data(dev)
	... when != match

gives a match for:

$ spatch -sp_file /tmp/minimal.cocci drivers/usb/renesas_usbhs/common.c
...
--- drivers/usb/renesas_usbhs/common.c
+++ /tmp/cocci-output-18078-7b0a6b-common.c
@@ -498,7 +498,6 @@ static struct renesas_usbhs_platform_inf
 {
 	struct renesas_usbhs_platform_info *info;
 	struct renesas_usbhs_driver_param *dparam;
-	const struct of_device_id *of_id = of_match_device(usbhs_of_match, dev);
 	u32 tmp;
 	int gpio;
 
@@ -507,7 +506,7 @@ static struct renesas_usbhs_platform_inf
 		return NULL;
 
 	dparam = &info->driver_param;
-	dparam->type = of_id ? (uintptr_t)of_id->data : 0;
+	dparam->type = of_id ? (uintptr_t)of_device_get_match_data(dev) : 0;
 	if (!of_property_read_u32(dev->of_node, "renesas,buswait", &tmp))
 		dparam->buswait_bwait = tmp;
 	gpio = of_get_named_gpio_flags(dev->of_node, "renesas,enable-gpio", 0,

However, 'of_id' is used as the first argument of the ternary operator. So,
shouldn't '... when != match' prevent this, since 'match' is used before the
replacement?

Thanks,

   Wolfram

-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 819 bytes
Desc: not available
URL: <https://systeme.lip6.fr/pipermail/cocci/attachments/20160217/65accc1b/attachment-0001.asc>

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

* [Cocci] false positive match with ternary operator?
  2016-02-17 16:06 [Cocci] false positive match with ternary operator? Wolfram Sang
@ 2016-02-17 16:13 ` Julia Lawall
  0 siblings, 0 replies; 2+ messages in thread
From: Julia Lawall @ 2016-02-17 16:13 UTC (permalink / raw)
  To: cocci

On Wed, 17 Feb 2016, Wolfram Sang wrote:

> So, I'll try again ;) This spatch:
>
> @@
> identifier match;
> expression table, dev;
> type T;
> @@
> -	T match = of_match_device(table, dev);
> 	... when != match
> -	match->data
> +	of_device_get_match_data(dev)
> 	... when != match
>
> gives a match for:
>
> $ spatch -sp_file /tmp/minimal.cocci drivers/usb/renesas_usbhs/common.c
> ...
> --- drivers/usb/renesas_usbhs/common.c
> +++ /tmp/cocci-output-18078-7b0a6b-common.c
> @@ -498,7 +498,6 @@ static struct renesas_usbhs_platform_inf
>  {
>  	struct renesas_usbhs_platform_info *info;
>  	struct renesas_usbhs_driver_param *dparam;
> -	const struct of_device_id *of_id = of_match_device(usbhs_of_match, dev);
>  	u32 tmp;
>  	int gpio;
>
> @@ -507,7 +506,7 @@ static struct renesas_usbhs_platform_inf
>  		return NULL;
>
>  	dparam = &info->driver_param;
> -	dparam->type = of_id ? (uintptr_t)of_id->data : 0;
> +	dparam->type = of_id ? (uintptr_t)of_device_get_match_data(dev) : 0;
>  	if (!of_property_read_u32(dev->of_node, "renesas,buswait", &tmp))
>  		dparam->buswait_bwait = tmp;
>  	gpio = of_get_named_gpio_flags(dev->of_node, "renesas,enable-gpio", 0,
>
> However, 'of_id' is used as the first argument of the ternary operator. So,
> shouldn't '... when != match' prevent this, since 'match' is used before the
> replacement?

No, Coccinelle doesn't know anything about the order or execution within
expressions, neither ?: nor && and ||

Maybe make a big disjunction around the pattern, and make two cases
starting from the point of T match = of_match_device(table, dev);

julia

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

end of thread, other threads:[~2016-02-17 16:13 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2016-02-17 16:06 [Cocci] false positive match with ternary operator? Wolfram Sang
2016-02-17 16:13 ` Julia Lawall

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.