Patchwork [1/2,asan] Allow creating/deleting hash table entries with new/delete

login
register
mail settings
Submitter Dodji Seketeli
Date Jan. 28, 2013, 9:30 p.m.
Message ID <87ip6hxafz.fsf@redhat.com>
Download mbox | patch
Permalink /patch/216375/
State New
Headers show

Comments

Dodji Seketeli - Jan. 28, 2013, 9:30 p.m.
Hello,

The hash table type can handle creation and removal of entries with
malloc/free.  This patchlet adds support for using new/delete.  It's
useful for hash table entry types that have constructors (and/or
destructors), to prevent the user from having to type boilerplate code
to initialize them over and over again.  This is used by the patch that
follows this one.

gcc/

	* hash-table.h (struct typed_delete_remove): New type.
	(typed_delete_remove::remove): Implement this using the delete
	operator.
---
 gcc/hash-table.h | 16 ++++++++++++++++
 1 file changed, 16 insertions(+)
Lawrence Crowl - Jan. 28, 2013, 10:08 p.m.
On 1/28/13, Dodji Seketeli <dodji@redhat.com> wrote:
> Hello,
>
> The hash table type can handle creation and removal of entries with
> malloc/free.  This patchlet adds support for using new/delete.  It's
> useful for hash table entry types that have constructors (and/or
> destructors), to prevent the user from having to type boilerplate code
> to initialize them over and over again.  This is used by the patch that
> follows this one.

Looks good to me.

>
> gcc/
>
> 	* hash-table.h (struct typed_delete_remove): New type.
> 	(typed_delete_remove::remove): Implement this using the delete
> 	operator.
> ---
>  gcc/hash-table.h | 16 ++++++++++++++++
>  1 file changed, 16 insertions(+)
>
> diff --git a/gcc/hash-table.h b/gcc/hash-table.h
> index 206423d..884840c 100644
> --- a/gcc/hash-table.h
> +++ b/gcc/hash-table.h
> @@ -235,6 +235,22 @@ typed_free_remove <Type>::remove (Type *p)
>    free (p);
>  }
>
> +/* Helpful type for removing entries with the delete operator.  */
> +
> +template <typename Type>
> +struct typed_delete_remove
> +{
> +  static inline void remove (Type *p);
> +};
> +
> +/* Remove with delete.  */
> +
> +template <typename Type>
> +inline void
> +typed_delete_remove <Type>::remove (Type *p)
> +{
> +  delete p;
> +}
>
>  /* Helpful type for a no-op remove.  */
>
> --
> 1.7.11.7
>
>
>
> --
> 		Dodji
>

Patch

diff --git a/gcc/hash-table.h b/gcc/hash-table.h
index 206423d..884840c 100644
--- a/gcc/hash-table.h
+++ b/gcc/hash-table.h
@@ -235,6 +235,22 @@  typed_free_remove <Type>::remove (Type *p)
   free (p);
 }
 
+/* Helpful type for removing entries with the delete operator.  */
+
+template <typename Type>
+struct typed_delete_remove
+{
+  static inline void remove (Type *p);
+};
+
+/* Remove with delete.  */
+
+template <typename Type>
+inline void
+typed_delete_remove <Type>::remove (Type *p)
+{
+  delete p;
+}
 
 /* Helpful type for a no-op remove.  */