This extends our folding of cast-like standard library functions
to also include C++23's std::forward_like.
PR c++/96780
gcc/cp/ChangeLog:
* cp-gimplify.cc (cp_fold) <case CALL_EXPR>: Fold calls
to std::forward_like as well.
gcc/testsuite/ChangeLog:
* g++.dg/opt/pr96780.C: Also test std::forward_like folding.
Reviewed-by: Marek Polacek <mpolacek@redhat.com>
Reviewed-by: Jason Merrill <jason@redhat.com>
&& DECL_NAME (callee) != NULL_TREE
&& (id_equal (DECL_NAME (callee), "move")
|| id_equal (DECL_NAME (callee), "forward")
+ || id_equal (DECL_NAME (callee), "forward_like")
|| id_equal (DECL_NAME (callee), "addressof")
/* This addressof equivalent is used heavily in libstdc++. */
|| id_equal (DECL_NAME (callee), "__addressof")
auto&& x11 = std::as_const(a);
auto&& x12 = std::as_const(ca);
#endif
+#if __cpp_lib_forward_like
+ auto&& x13 = std::forward_like<int&&>(a);
+ auto&& x14 = std::forward_like<int&&>(ca);
+#endif
}
// { dg-final { scan-tree-dump-not "= std::move" "gimple" } }
// { dg-final { scan-tree-dump-not "= std::addressof" "gimple" } }
// { dg-final { scan-tree-dump-not "= std::__addressof" "gimple" } }
// { dg-final { scan-tree-dump-not "= std::as_const" "gimple" } }
+// { dg-final { scan-tree-dump-not "= std::forward_like" "gimple" } }