While looking at concepts caching I noticed that we were clearing the caches unnecessarily for non-constant initialization, which shouldn't affect folding.
Tested x86_64-pc-linux-gnu, applying to trunk. * typeck2.c (store_init_value): Only clear_cv_and_fold_caches if the value is constant. --- gcc/cp/typeck2.c | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/gcc/cp/typeck2.c b/gcc/cp/typeck2.c index 58fa54f40af..ec0e6a7e33d 100644 --- a/gcc/cp/typeck2.c +++ b/gcc/cp/typeck2.c @@ -907,9 +907,6 @@ store_init_value (tree decl, tree init, vec<tree, va_gc>** cleanups, int flags) /* Handle aggregate NSDMI in non-constant initializers, too. */ value = replace_placeholders (value, decl); - /* DECL may change value; purge caches. */ - clear_cv_and_fold_caches (); - /* If the initializer is not a constant, fill in DECL_INITIAL with the bits that are constant, and then return an expression that will perform the dynamic initialization. */ @@ -918,6 +915,10 @@ store_init_value (tree decl, tree init, vec<tree, va_gc>** cleanups, int flags) || vla_type_p (type) || ! reduced_constant_expression_p (value))) return split_nonconstant_init (decl, value); + + /* DECL may change value; purge caches. */ + clear_cv_and_fold_caches (); + /* If the value is a constant, just put it in DECL_INITIAL. If DECL is an automatic variable, the middle end will turn this into a dynamic initialization later. */ base-commit: d07428e896b5cfc7d78435de6ea08aad4e5ccfa5 -- 2.21.0