diff mbox series

[04/88] cocci: avoid use of g_new0()

Message ID 20171006235023.11952-5-f4bug@amsat.org
State New
Headers show
Series use g_new() family of functions | expand

Commit Message

Philippe Mathieu-Daudé Oct. 6, 2017, 11:48 p.m. UTC
Signed-off-by: Philippe Mathieu-Daudé <f4bug@amsat.org>
---
 scripts/coccinelle/g_new.cocci | 46 ++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 46 insertions(+)

Comments

Philippe Mathieu-Daudé Oct. 7, 2017, 3:41 a.m. UTC | #1
On 10/06/2017 08:48 PM, Philippe Mathieu-Daudé wrote:
> Signed-off-by: Philippe Mathieu-Daudé <f4bug@amsat.org>
> ---
>  scripts/coccinelle/g_new.cocci | 46 ++++++++++++++++++++++++++++++++++++++++++
>  1 file changed, 46 insertions(+)
> 
> diff --git a/scripts/coccinelle/g_new.cocci b/scripts/coccinelle/g_new.cocci
> index 368f0c5651..9643ce3f23 100644
> --- a/scripts/coccinelle/g_new.cocci
> +++ b/scripts/coccinelle/g_new.cocci
> @@ -127,6 +127,52 @@ T **m;
>  - *m = g_malloc0(sizeof(**m));
>  + *m = g_new0(T *, 1);
>  
> +////////////////////////////////////////
> +//
> +// no point in zeroing the allocation
> +//
> +
> +// the loop right afterwards fully initializes the memory
> +@@
> +type T;
> +identifier a, i;
> +expression c, e;
> +@@
> +(
> +-a = g_new0(T, c);
> +    ... when != a, c
> ++a = g_new(T, c);
> +    for (i = 0; i < c; i++) {
> +        a[i] = e;
> +    }
> +|
> +-a = g_try_new0(T, c);
> +    ... when != a, c
> ++a = g_try_new(T, c);
> +    for (i = 0; i < c; i++) {
> +        a[i] = e;
> +    }
> +)
> +
> +// compound literals
> +@@
> +type T;
> +identifier p;
> +expression s, e;
> +@@
> +(
> +- p = g_malloc0(s);
> ++ p = g_malloc(s);
> +|
> +- p = g_try_malloc0(s);
> ++ p = g_try_malloc(s);
> +|
> +- p = g_new0(T, 1);
> ++ p = g_new(T, 1);
> +)
> +  ... when != p
> +  *p = e;

It seems I misunderstood compound literals, I somehow believed this
would imply uninitialized fields would be zeroed.
So this transformation leads to incorrect code.

> +
>  ////////////////////////////////////////
>  //
>  // last transformations: cleanups
>
diff mbox series

Patch

diff --git a/scripts/coccinelle/g_new.cocci b/scripts/coccinelle/g_new.cocci
index 368f0c5651..9643ce3f23 100644
--- a/scripts/coccinelle/g_new.cocci
+++ b/scripts/coccinelle/g_new.cocci
@@ -127,6 +127,52 @@  T **m;
 - *m = g_malloc0(sizeof(**m));
 + *m = g_new0(T *, 1);
 
+////////////////////////////////////////
+//
+// no point in zeroing the allocation
+//
+
+// the loop right afterwards fully initializes the memory
+@@
+type T;
+identifier a, i;
+expression c, e;
+@@
+(
+-a = g_new0(T, c);
+    ... when != a, c
++a = g_new(T, c);
+    for (i = 0; i < c; i++) {
+        a[i] = e;
+    }
+|
+-a = g_try_new0(T, c);
+    ... when != a, c
++a = g_try_new(T, c);
+    for (i = 0; i < c; i++) {
+        a[i] = e;
+    }
+)
+
+// compound literals
+@@
+type T;
+identifier p;
+expression s, e;
+@@
+(
+- p = g_malloc0(s);
++ p = g_malloc(s);
+|
+- p = g_try_malloc0(s);
++ p = g_try_malloc(s);
+|
+- p = g_new0(T, 1);
++ p = g_new(T, 1);
+)
+  ... when != p
+  *p = e;
+
 ////////////////////////////////////////
 //
 // last transformations: cleanups