Tested x86_64-pc-linux-gnu, applying to trunk. -- 8< --
In the testcase below, we push_to_top_level to instantiate f and g, and they can both use the previous_class_level cache from instantiating A<int>. Wiping the cache in pop_from_top_level is not helpful; we'll do that in pushclass if needed. template <class T> struct A { int i; void f() { i = 42; } void g() { i = 24; } }; int main() { A<int> a; a.f(); a.g(); } gcc/cp/ChangeLog: * name-lookup.cc (pop_from_top_level): Don't invalidate_class_lookup_cache. --- gcc/cp/name-lookup.cc | 3 --- 1 file changed, 3 deletions(-) diff --git a/gcc/cp/name-lookup.cc b/gcc/cp/name-lookup.cc index 7c61bc3bf61..8fd5733c1e2 100644 --- a/gcc/cp/name-lookup.cc +++ b/gcc/cp/name-lookup.cc @@ -8205,9 +8205,6 @@ pop_from_top_level (void) auto_cond_timevar tv (TV_NAME_LOOKUP); - /* Clear out class-level bindings cache. */ - if (previous_class_level) - invalidate_class_lookup_cache (); pop_class_stack (); release_tree_vector (current_lang_base); base-commit: bc24c51c0ccd64617864897ad071c98004ffc0a4 -- 2.31.1