On Tue, Jan 17, 2012 at 14:36, Janne Blomqvist
<blomqvist.ja...@gmail.com> wrote:
> On Tue, Jan 17, 2012 at 14:29, Paul Richard Thomas
> <paul.richard.tho...@gmail.com> wrote:
>> Dear Tobias and Janne,
>>
>> I had preparedand was about to submit the identical patch :-)
>>
>> On Tue, Jan 17, 2012 at 12:45 PM, Janne Blomqvist
>> <blomqvist.ja...@gmail.com> wrote:
>>> On Tue, Jan 17, 2012 at 13:24, Tobias Burnus <bur...@net-b.de> wrote:
>>>> This patch nullifies (scalar) allocatables after malloc, if (and only if)
>>>> they contain allocatable components to make sure that no uninitialized
>>>> memory is accessed.
>>>>
>>>> Build and regtested on x86-64-linux.
>>>> OK for the trunk?
>>>
>>> calloc potentially has better performance than malloc+memset, and has
>>> smaller generated code size too.
>>
>> On a previous occasion (for class array allocation), I looked for and
>> was unable to find a __BUILTIN_CALLOC.  If it exists, use that.
>
> It exists in the middle end, but doesn't seem to be wired up in the
> Fortran frontend yet. A simple
>
> --- f95-lang.c.orig     2012-01-17 14:32:10.000000000 +0200
> +++ f95-lang.c  2012-01-17 14:35:13.000000000 +0200
> @@ -1007,6 +1007,12 @@ gfc_init_builtin_functions (void)
>                      "malloc", ATTR_NOTHROW_LEAF_LIST);
>   DECL_IS_MALLOC (builtin_decl_explicit (BUILT_IN_MALLOC)) = 1;
>
> +  ftype = build_function_type_list (pvoid_type_node, size_type_node,
> +                                   size_type_node, NULL_TREE);
> +  gfc_define_builtin ("__builtin_calloc", ftype, BUILT_IN_CALLOC,
> +                     "calloc", ATTR_NOTHROW_LEAF_LIST);
> +  DECL_IS_MALLOC (builtin_decl_explicit (BUILT_IN_MALLOC)) = 1;
> +
>   ftype = build_function_type_list (pvoid_type_node,
>                                     size_type_node, pvoid_type_node,
>                                     NULL_TREE);
>
>
> ought to do it (untested).

Make that

--- f95-lang.c.orig     2012-01-17 14:32:10.000000000 +0200
+++ f95-lang.c  2012-01-17 14:40:25.000000000 +0200
@@ -1007,6 +1007,12 @@ gfc_init_builtin_functions (void)
                      "malloc", ATTR_NOTHROW_LEAF_LIST);
   DECL_IS_MALLOC (builtin_decl_explicit (BUILT_IN_MALLOC)) = 1;

+  ftype = build_function_type_list (pvoid_type_node, size_type_node,
+                                   size_type_node, NULL_TREE);
+  gfc_define_builtin ("__builtin_calloc", ftype, BUILT_IN_CALLOC,
+                     "calloc", ATTR_NOTHROW_LEAF_LIST);
+  DECL_IS_MALLOC (builtin_decl_explicit (BUILT_IN_CALLOC)) = 1;
+
   ftype = build_function_type_list (pvoid_type_node,
                                     size_type_node, pvoid_type_node,
                                     NULL_TREE);




-- 
Janne Blomqvist

Reply via email to