Re: [PATCH 1/2] c++: testsuite: Add some opt/is_constant_evaluated3.C variants

Jason Merrill <[email protected]>
Newsgroups gmane.comp.gcc.patches
Message-ID <[email protected]>
On 8/6/26 10:59 AM, Patrick Palka wrote:
> r13-6422 added opt/is_constant_evaluated3.C to verify that we constant
> fold copy-init such as a1.  (Later, r14-6506 enabled constant folding of
> a2-a5 initializers.)  r13-6422 turned out to cause PR c++/126483, a bug
> in our folding of copy-init inside a lambda scope.
> 
> The new 3a.C demonstrates however that we still don't constant
> fold a1's copy-init when inside a constexpr function scope.  3b.C
> demonstrates that we do fold it when inside a (maybe-constexpr) lambda
> scope.

OK.
> gcc/testsuite/ChangeLog:
> 
> 	* g++.dg/opt/is_constant_evaluated3a.C: New test.
> 	* g++.dg/opt/is_constant_evaluated3b.C: New test.
> ---
>   .../g++.dg/opt/is_constant_evaluated3a.C      | 24 +++++++++++++++++++
>   .../g++.dg/opt/is_constant_evaluated3b.C      | 24 +++++++++++++++++++
>   2 files changed, 48 insertions(+)
>   create mode 100644 gcc/testsuite/g++.dg/opt/is_constant_evaluated3a.C
>   create mode 100644 gcc/testsuite/g++.dg/opt/is_constant_evaluated3b.C
> 
> diff --git a/gcc/testsuite/g++.dg/opt/is_constant_evaluated3a.C b/gcc/testsuite/g++.dg/opt/is_constant_evaluated3a.C
> new file mode 100644
> index 000000000000..4ec3ecdf7b5d
> --- /dev/null
> +++ b/gcc/testsuite/g++.dg/opt/is_constant_evaluated3a.C
> @@ -0,0 +1,24 @@
> +// A version of is_constant_evaluated3.C where the containing function is
> +// constexpr.
> +// { dg-do compile { target c++14 } }
> +// { dg-additional-options "-O -fdump-tree-original" }
> +
> +struct A {
> +  constexpr A(int n) : n(n), m(__builtin_is_constant_evaluated()) { }
> +  constexpr A() : A(42) { }
> +  int n, m;
> +};
> +
> +constexpr void f() {
> +  A a1 = {42};
> +  A a2{42};
> +  A a3(42);
> +  A a4;
> +  A a5{};
> +}
> +
> +// { dg-final { scan-tree-dump "a1 = {\\.n=42, \\.m=0}" "original" { xfail *-*-* } } }
> +// { dg-final { scan-tree-dump "a2 = {\\.n=42, \\.m=0}" "original" } }
> +// { dg-final { scan-tree-dump "a3 = {\\.n=42, \\.m=0}" "original" } }
> +// { dg-final { scan-tree-dump "a4 = {\\.n=42, \\.m=0}" "original" } }
> +// { dg-final { scan-tree-dump "a5 = {\\.n=42, \\.m=0}" "original" } }
> diff --git a/gcc/testsuite/g++.dg/opt/is_constant_evaluated3b.C b/gcc/testsuite/g++.dg/opt/is_constant_evaluated3b.C
> new file mode 100644
> index 000000000000..ff708e23832b
> --- /dev/null
> +++ b/gcc/testsuite/g++.dg/opt/is_constant_evaluated3b.C
> @@ -0,0 +1,24 @@
> +// A version of is_constant_evaluated3.C where the containing function is
> +// a (maybe-constexpr) lambda.
> +// { dg-do compile { target c++17 } }
> +// { dg-additional-options "-O -fdump-tree-original" }
> +
> +struct A {
> +  constexpr A(int n) : n(n), m(__builtin_is_constant_evaluated()) { }
> +  constexpr A() : A(42) { }
> +  int n, m;
> +};
> +
> +auto f = [] {
> +  A a1 = {42};
> +  A a2{42};
> +  A a3(42);
> +  A a4;
> +  A a5{};
> +};
> +
> +// { dg-final { scan-tree-dump "a1 = {\\.n=42, \\.m=0}" "original" } }
> +// { dg-final { scan-tree-dump "a2 = {\\.n=42, \\.m=0}" "original" } }
> +// { dg-final { scan-tree-dump "a3 = {\\.n=42, \\.m=0}" "original" } }
> +// { dg-final { scan-tree-dump "a4 = {\\.n=42, \\.m=0}" "original" } }
> +// { dg-final { scan-tree-dump "a5 = {\\.n=42, \\.m=0}" "original" } }
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.