aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorJan Hubicka <jh@suse.cz>2021-01-02 16:03:41 +0100
committerJan Hubicka <jh@suse.cz>2021-01-02 16:04:24 +0100
commitc304a68e41f2a529b635106a384ecbf225f9abd2 (patch)
tree68a247480fc5d49c0639faf64698127bf34ff51a /gcc
parentb6dd195aac170b047fd9633443a448ae94ab14d0 (diff)
downloadgcc-c304a68e41f2a529b635106a384ecbf225f9abd2.zip
gcc-c304a68e41f2a529b635106a384ecbf225f9abd2.tar.gz
gcc-c304a68e41f2a529b635106a384ecbf225f9abd2.tar.bz2
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.
Diffstat (limited to 'gcc')
-rw-r--r--gcc/cp/cp-tree.h2
-rw-r--r--gcc/cp/decl2.c1
-rw-r--r--gcc/cp/tree.c9
3 files changed, 12 insertions, 0 deletions
diff --git a/gcc/cp/cp-tree.h b/gcc/cp/cp-tree.h
index fc6a789..102f6e1 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 af88e7f..8769ff5 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 0584a7b..e1ad0ac 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. */