c++: Don't purge the satisfaction caches
authorPatrick Palka <ppalka@redhat.com>
Mon, 2 Nov 2020 18:19:29 +0000 (13:19 -0500)
committerPatrick Palka <ppalka@redhat.com>
Mon, 2 Nov 2020 18:19:29 +0000 (13:19 -0500)
commitbebabf70a01b78d9bea65a0bbe8744a2adb6b373
tree551fb34e5c8b4d5111aa6493f8e6555fc9821c43
parent05161256d3d2a598966ca1cf676fa0e427570f73
c++: Don't purge the satisfaction caches

The adoption of P2104 ("Disallow changing concept values") means we can
memoize the result of satisfaction indefinitely and no longer have to
clear the satisfaction caches on various events that would affect
satisfaction.  To that end, this patch removes the invalidation routine
clear_satisfaction_cache and adjusts its callers appropriately.

This provides a large reduction in compile time and memory use in some
cases.  For example, on the libstdc++ test std/ranges/adaptor/join.cc,
compile time and memory usage drops nearly 75%, from 7.5s/770MB to
2s/230MB, with a --enable-checking=release compiler.

gcc/cp/ChangeLog:

* class.c (finish_struct_1): Don't call clear_satisfaction_cache.
* constexpr.c (clear_cv_and_fold_caches): Likewise.  Remove bool
parameter.
* constraint.cc (clear_satisfaction_cache): Remove definition.
* cp-tree.h (clear_satisfaction_cache): Remove declaration.
(clear_cv_and_fold_caches): Remove bool parameter.
* typeck2.c (store_init_value): Remove argument to
clear_cv_and_fold_caches.

gcc/testsuite/ChangeLog:

* g++.dg/cpp2a/concepts-complete1.C: Delete test that became
ill-formed after P2104.
gcc/cp/class.c
gcc/cp/constexpr.c
gcc/cp/constraint.cc
gcc/cp/cp-tree.h
gcc/cp/typeck2.c
gcc/testsuite/g++.dg/cpp2a/concepts-complete1.C [deleted file]