https://gcc.gnu.org/bugzilla/show_bug.cgi?id=101163
Richard Biener <rguenth at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- Last reconfirmed| |2021-06-22 Status|UNCONFIRMED |NEW Ever confirmed|0 |1 Keywords| |compile-time-hog CC| |nathan at gcc dot gnu.org --- Comment #2 from Richard Biener <rguenth at gcc dot gnu.org> --- Confirmed on trunk. There are linked-lists involved, so not unexpected I guess. The top functions in a profile of an unoptimized cc1plus are fields_linear_search and member_vec_linear_search called from get_class_binding[_direct] called ultimatively from lookup_member. Nathan did a lot of name-lookup refactoring for modules but the core data structures stayed the same I guess. In the linear list walk a quite big chunk of the constant overhead is the anon aggregate check: static tree fields_linear_search (tree klass, tree name, bool want_type) { for (tree fields = TYPE_FIELDS (klass); fields; fields = DECL_CHAIN (fields)) { tree decl = fields; if (TREE_CODE (decl) == FIELD_DECL && ANON_AGGR_TYPE_P (TREE_TYPE (decl))) { if (tree temp = search_anon_aggr (TREE_TYPE (decl), name, want_type)) return temp; } if (DECL_NAME (decl) != name) continue; if there was a bit on the FIELD_DECL instead of the extra indirection that would help this a lot (by a constant factor). Of course a linear search should be a no-go ...