From c304a68e41f2a529b635106a384ecbf225f9abd2 Mon Sep 17 00:00:00 2001
From: Jan Hubicka <jh@suse.cz>
Date: Sat, 2 Jan 2021 16:03:41 +0100
Subject: [PATCH] Free datastructures pointing to CFG after parsing

	* cp-tree.h (cp_tree_c_finish_parsing): Declare.
	* decl2.c (c_parse_final_cleanups): Call cp_tree_c_finish_parsing.
	* tree.c (cp_tree_c_finish_parsing): New function.
---
 gcc/cp/cp-tree.h | 2 ++
 gcc/cp/decl2.c   | 1 +
 gcc/cp/tree.c    | 9 +++++++++
 3 files changed, 12 insertions(+)

diff --git a/gcc/cp/cp-tree.h b/gcc/cp/cp-tree.h
index fc6a7898475d..102f6e1464a6 100644
--- a/gcc/cp/cp-tree.h
+++ b/gcc/cp/cp-tree.h
@@ -8238,6 +8238,8 @@ struct uid_sensitive_constexpr_evaluation_checker
   bool evaluation_restricted_p () const;
 };
 
+void cp_tree_c_finish_parsing ();
+
 /* In cp-ubsan.c */
 extern void cp_ubsan_maybe_instrument_member_call (tree);
 extern void cp_ubsan_instrument_member_accesses (tree *);
diff --git a/gcc/cp/decl2.c b/gcc/cp/decl2.c
index af88e7f5cab4..8769ff51be9e 100644
--- a/gcc/cp/decl2.c
+++ b/gcc/cp/decl2.c
@@ -5257,6 +5257,7 @@ c_parse_final_cleanups (void)
   perform_deferred_noexcept_checks ();
 
   fini_constexpr ();
+  cp_tree_c_finish_parsing ();
   clear_consteval_vfns (consteval_vtables);
 
   /* The entire file is now complete.  If requested, dump everything
diff --git a/gcc/cp/tree.c b/gcc/cp/tree.c
index 0584a7b725e4..e1ad0acb1f97 100644
--- a/gcc/cp/tree.c
+++ b/gcc/cp/tree.c
@@ -5926,6 +5926,15 @@ maybe_warn_zero_as_null_pointer_constant (tree expr, location_t loc)
   return false;
 }
 
+/* Release memory we no longer need after parsing.  */
+void
+cp_tree_c_finish_parsing ()
+{
+  if (previous_class_level)
+    invalidate_class_lookup_cache ();
+  deleted_copy_types = NULL;
+}
+
 #if defined ENABLE_TREE_CHECKING && (GCC_VERSION >= 2007)
 /* Complain that some language-specific thing hanging off a tree
    node has been accessed improperly.  */
-- 
GitLab