On October 13, 2017 8:29:40 PM GMT+02:00, Nathan Sidwell <nat...@acm.org> wrote: >[Although I filed this as a middle-end bug, it's really a core infra >bug, not sure who the best reviewer is] > >In working on tree streaming in the modules branch, I discovered poor >tree node size and hierarchy bits. > >Here's a fix for the first part of that. tree.c (tree_code_size) >returns sizeof (tree_type_non_common) for any tcc_type node. That's >wasteful, given we have tree_type_common-> >tree_type_with_lang_specific-> tree_type_non_common available as >choices. It's also obscuring defects in (at least) the c++ FE where we > >use tree_type_non_common fields, but claim the node doesn't contain >that >structure. Ew. > >This patch makes tree_code_size ask the lang hook for the size of >non-core type nodes. It also fixes the c++ and objc FEs to return a >size for the nodes it cares about. > >I don't (yet) know whether all the core types are tree_type_non_common, > >nor whether the FE's can return smaller sizes than the do with this >patch. But at least the control flow is now correct. during >developing >this patch I added an assert that the lang hook was returning a size at > >least as big as tree_type_non_common, so they couldn't be more broken >than before the patch. > >I intend to continue cleaning this up of course. It's not clear to me >whether we should cache these node sizes in an array, and the way it >goes about checking nodes with nested switches is understandable, but >possible not the fastest solution. However let's at least get the >sizing >right first.
We were conservative exactly to avoid the langhook here. I think there's similar 'bug' on the decl side. Richard. >ok? > >nathan