Hi,

I have more info concerning my gnat_malloc problem.

I watched the code in gcc/ada/gcc-interface/trans.c and found the location 
where malloc_decl tree is built.
In gigi ()function (trans.c:411), the ftype for malloc_decl is done this way :

  ftype = build_function_type_list (ptr_void_type_node, sizetype, NULL_TREE);

I looked at the code of build_function_type_list_1 in tree.c and found that 
stdargs function are built with their chained list of argument ending with a 
void_list_node :

    {
      last = args;
      args = nreverse (args);
      TREE_CHAIN (last) = void_list_node;
    }

But I also noticed that void_list_node was a null pointer!! instead of being a 
node with TREE_VALUE = void_type_node and no TREE_CHAIN  (as described in 
tree.h)
So I wondered, where should void_list_node be initialized in GNAT frontend and 
noticed that the initialization of void_list_node was done AFTER its use to 
declare ftype for malloc_decl.

ftype  for malloc_decl is initialized in gigi() function at trans.c:411  
whereas void_list_node in only initialized in gigi() function at trans.c:665 by 
a call to gnat_install_builtins() ---> install_builtin_elementary_types()  --> 
void_list_node = build_void_list_node ();


It seems like a bug. Is it a known one ? someone has the proper fix ? I put the 
call to gnat_install_builtins() higher inside gigi() and it solve my current 
problem but I'm not sure exactly when it has to be called and if there are bad 
side effects.

    Regards,

Selim Belbachir


Reply via email to