[PATCH] Come up with constructors of symtab_node, cgraph_node and varpool_node.

Richard Biener richard.guenther@gmail.com
Thu Dec 5 15:12:00 GMT 2019


On December 5, 2019 3:09:40 PM GMT+01:00, "Martin Liška" <mliska@suse.cz> wrote:
>On 12/5/19 2:53 PM, Richard Biener wrote:
>> On December 5, 2019 2:03:58 PM GMT+01:00, "Martin Liška"
><mliska@suse.cz> wrote:
>>> On 12/5/19 1:59 PM, Richard Biener wrote:
>>>> Isn't there ggc_alloc <T> for this?  Also ggc_alloc_no_dtor<T> in
>>> case you
>>>> want to handle finalization yourself.
>>>
>>> No, if I see correctly it only calls Dtor:
>> 
>> But its odd to handle finalization but not construction here and not
>finalization in your new wrapper.
>
>No, ggc_new calls ggc_alloc that will eventually call destructor for
>types
>with non-trivial destructors.
>
>Alternative solution would be to no come up with ggc_alloc and call
>default
>ctor in ggc_alloc. But that's too restrictive as all types must have
>default
>constructor. That's not desirable to me.

Isn't there std::default_constructible? Also after your patch it's far from obvious which api to use. 

Richard. 

>Martin
>
>> 
>> That doesn't look like a good API. I see Honza approved the change
>but maybe you can fix the actual issue without this new API for the
>moment.
>> 
>> Richard.
>> 
>>> template<typename T>
>>> inline T *
>>> ggc_alloc (ALONE_CXX_MEM_STAT_INFO)
>>> {
>>>    if (need_finalization_p<T> ())
>>> return static_cast<T *> (ggc_internal_alloc (sizeof (T),
>finalize<T>,
>>> 0, 1
>>> 						 PASS_MEM_STAT));
>>>    else
>>>     return static_cast<T *> (ggc_internal_alloc (sizeof (T), NULL,
>0, 1
>>> 						 PASS_MEM_STAT));
>>> }
>>>
>>> ...
>>>
>>> /* Allocate a chunk of memory of SIZE bytes.  Its contents are
>>> undefined.  */
>>>
>>> void *
>>> ggc_internal_alloc (size_t size, void (*f)(void *), size_t s, size_t
>n
>>> 		    MEM_STAT_DECL)
>>> {
>>> ...
>>>
>>> The function is generic, it does not know about type T. That's why
>it
>>> does not (and can't call) ctor.
>>>
>>> Martin
>> 



More information about the Gcc-patches mailing list