https://gcc.gnu.org/bugzilla/show_bug.cgi?id=97681
--- Comment #7 from Jakub Jelinek <jakub at gcc dot gnu.org> ---
Guess that particular spot could be changed with:
--- gcc/cp/typeck2.c 2020-09-12 13:36:42.500499341 +0200
+++ gcc/cp/typeck2.c 2020-11-03 10:44:10.257021110 +0100
@@ -935,9 +935,11 @@ store_init_value (tree decl, tree init,
}
/* Don't fold initializers of automatic variables in constexpr functions,
that might fold away something that needs to be diagnosed at constexpr
- evaluation time. */
+ evaluation time. Don't fold initializers of automatic variables
+ with -O0 either. */
if (!current_function_decl
- || !DECL_DECLARED_CONSTEXPR_P (current_function_decl)
+ || (!DECL_DECLARED_CONSTEXPR_P (current_function_decl)
+ && optimize)
|| TREE_STATIC (decl))
value = cp_fully_fold_init (value);
but we have dozens if not hundreds of other places. And, just disabling
constant evaluation at -O0 except in manifestly constant contexts can't really
work, e.g. many of the warnings heavily relies on the foldings being possible.