On Tue, Oct 1, 2019 at 8:50 PM Jason Merrill <ja...@redhat.com> wrote: > > On 10/1/19 3:34 AM, Richard Biener wrote: > > On Mon, Sep 30, 2019 at 8:33 PM Jason Merrill <ja...@redhat.com> wrote: > >> > >> My comments accidentally got lost. > >> > >> Several places in the front-end (and elsewhere) use the same lazy > >> allocation pattern for hash_maps, and this patch replaces them with > >> hash_map_safe_* functions like vec_safe_*. They don't provide a way > >> to specify an initial size, but I don't think that's a significant > >> issue. > >> > >> Tested x86_64-pc-linux-gnu. OK for trunk? > > > > You are using create_ggc but the new functions do not indicate that ggc > > allocation is done. > > It's then also incomplete with not having a non-ggc variant > > of them? Maybe I'm missing something. > > Ah, I had been thinking that this lazy pattern would only be used with > ggc, but I see that I was wrong. How's this? > > Incidentally, now I see another C++11 feature I'd like to be able to > use: default template arguments for function templates.
I presume template<bool ggc, typename K, typename V, typename H> inline bool hash_map_safe_put (hash_map<K,V,H> *&h, const K& k, const V& v, size_t size = default_hash_map_size) { return hash_map_maybe_create<ggc> (h, size)->put (k, v); } was deemed to ugly? IMHO instantiating the templates for different sizes is unwanted compile-time overhead (plus not being able to use a default value makes non-default values creep into the code-base?). I'd have OKed a variant like above, so - would that work for you (change hash_map_maybe_create as well then, of course). Thanks, Richard.