Ping.

On Thu, Aug 29, 2024 at 04:15:41PM -0400, Marek Polacek wrote:
> Bootstrapped/regtested on x86_64-pc-linux-gnu, ok for trunk/14/13?
> 
> -- >8 --
> Here we wrongly mark the reference temporary for g TREE_READONLY,
> so it's put in .rodata and so we can't modify its subobject even
> when the subobject is marked mutable.  This is so since r9-869.
> r14-1785 fixed a similar problem, but not in set_up_extended_ref_temp.
> 
>       PR c++/116369
> 
> gcc/cp/ChangeLog:
> 
>       * call.cc (set_up_extended_ref_temp): Don't mark a temporary
>       TREE_READONLY if its type is TYPE_HAS_MUTABLE_P.
> 
> gcc/testsuite/ChangeLog:
> 
>       * g++.dg/tree-ssa/initlist-opt7.C: New test.
> ---
>  gcc/cp/call.cc                                |  4 +++-
>  gcc/testsuite/g++.dg/tree-ssa/initlist-opt7.C | 13 +++++++++++++
>  2 files changed, 16 insertions(+), 1 deletion(-)
>  create mode 100644 gcc/testsuite/g++.dg/tree-ssa/initlist-opt7.C
> 
> diff --git a/gcc/cp/call.cc b/gcc/cp/call.cc
> index fa7f05d76f6..d30f36d49ff 100644
> --- a/gcc/cp/call.cc
> +++ b/gcc/cp/call.cc
> @@ -13964,7 +13964,9 @@ set_up_extended_ref_temp (tree decl, tree expr, 
> vec<tree, va_gc> **cleanups,
>    init = cp_fully_fold (init);
>    if (TREE_CONSTANT (init))
>      {
> -      if (literal_type_p (type) && CP_TYPE_CONST_NON_VOLATILE_P (type))
> +      if (literal_type_p (type)
> +       && CP_TYPE_CONST_NON_VOLATILE_P (type)
> +       && !TYPE_HAS_MUTABLE_P (type))
>       {
>         /* 5.19 says that a constant expression can include an
>            lvalue-rvalue conversion applied to "a glvalue of literal type
> diff --git a/gcc/testsuite/g++.dg/tree-ssa/initlist-opt7.C 
> b/gcc/testsuite/g++.dg/tree-ssa/initlist-opt7.C
> new file mode 100644
> index 00000000000..2420db502a6
> --- /dev/null
> +++ b/gcc/testsuite/g++.dg/tree-ssa/initlist-opt7.C
> @@ -0,0 +1,13 @@
> +// PR c++/116369
> +// { dg-do run { target c++11 } }
> +
> +struct f{
> +  mutable int t;
> +};
> +
> +const f &g = {1};
> +
> +int main()
> +{
> +  g.t++;
> +}
> 
> base-commit: 6bfeba12c86b4d0dae27d99b484f64774dd49398
> -- 
> 2.46.0
> 

Marek

Reply via email to