On Wed, Aug 28, 2013 at 03:05:37PM +0200, Jakub Jelinek wrote: > On Wed, Aug 28, 2013 at 02:57:01PM +0200, Marek Polacek wrote: > > On Wed, Aug 28, 2013 at 02:49:54PM +0200, Richard Biener wrote: > > > On Wed, Aug 28, 2013 at 2:15 PM, Marek Polacek <pola...@redhat.com> wrote: > > > > On Wed, Aug 28, 2013 at 12:40:50PM +0200, Richard Biener wrote: > > > >> On Tue, Aug 27, 2013 at 2:33 PM, Marek Polacek <pola...@redhat.com> > > > >> wrote: > > > >> > It turned out that for tree -> tree mapping we don't need the hash > > > >> > table at all; pointer map is much more convenient. So this patch > > > >> > weeds out the hash table out of ubsan and introduces pointer map > > > >> > instead. Quite a lot of code could go away--no need to set the > > > >> > alloc pools up etc. > > > >> > > > > >> > Regtested, ran bootstrap-ubsan on x86_64-linux. Applying to the > > > >> > ubsan branch. > > > >> > > > >> You can use the type-safe pointer_map <tree> now (ok, only the data > > > >> type > > > >> is type safe, the pointer is still void). > > > > > > > > Thanks, done with the following. Please let me know if you see > > > > something wrong in this; otherwise I'll commit it if the > > > > bootstrap-ubsan passes. > > > > > > Probably misses freeing of the pointer-map using 'delete' somewhere. > > > > That's a problem, since ubsan is not a pass, we can't simply delete > > the map at the end of the pass when it's not needed anymore... > > > > Perhaps some GTY(()) stuff could do it, but I don't know which one. > > You basically want to keep the pointer map for as long as you can > lookup types, which is done now from both FEs and > middle-end?
Yes, I think so. > I guess it is the same category as say > debug_expr_for_decl or value_expr_for_decl map tables, which we never free > either. But for those we indeed > GTY ((if_marked ("tree_decl_map_marked_p"), param_is (struct tree_decl_map))) > and thus remove items if the original decl is not referenced from anywhere > else; but pointer_map doesn't allow item removal; do we walk it for GC at > all? >From a quick look, it doesn't seem like we do. (I was searching for something about pointer_map in ggc* and gen* files.) > If so, it might prevent some types from being GC collected, on the > other side right now it isn't expected that too many types will be put into > the map. That's right. I expect that typically there will be no more than, say, 10 types in the map. Marek