GCC modified for the FreeChainXenon project
Find a file
Patrick Palka 066c7893ea c++/coroutines: correct passing *this to promise type [PR104981]
When passing *this to the promise type ctor (or to its operator new)
(as per [dcl.fct.def.coroutine]/4), we add an explicit cast to lvalue
reference.  But this is unnecessary since *this is already always an
lvalue.  And doing so means we need to call convert_from_reference
afterward to lower the reference expression to an implicit dereference,
which we're currently neglecting to do and which causes overload
resolution to get confused when computing argument conversions.

So this patch removes this unneeded reference cast when passing *this
to the promise ctor, and removes both the cast and implicit deref when
passing *this to operator new, for consistency.  While we're here, use
cp_build_fold_indirect_ref instead of directly building INDIRECT_REF.

	PR c++/104981
	PR c++/115550

gcc/cp/ChangeLog:

	* coroutines.cc (morph_fn_to_coro): Remove unneeded calls
	to convert_to_reference and convert_from_reference when
	passing *this.  Use cp_build_fold_indirect_ref instead
	of directly building INDIRECT_REF.

gcc/testsuite/ChangeLog:

	* g++.dg/coroutines/pr104981-preview-this.C: New test.
	* g++.dg/coroutines/pr115550-preview-this.C: New test.

Reviewed-by: Iain Sandoe <iain@sandoe.co.uk>
Reviewed-by: Jason Merrill <jason@redhat.com>
(cherry picked from commit 7c5a9bf1d206fe20cb050200d4a30f11c76b1b19)
2024-07-22 21:32:07 -04:00
.github Minor formatting fix for newly-added file from previous commit 2023-11-01 19:28:56 -04:00
c++tools Update ChangeLog and version files for release 2024-05-07 06:52:35 +00:00
config Update ChangeLog and version files for release 2024-05-07 06:52:35 +00:00
contrib Daily bump. 2024-05-09 11:03:31 +00:00
fixincludes Update ChangeLog and version files for release 2024-05-07 06:52:35 +00:00
gcc c++/coroutines: correct passing *this to promise type [PR104981] 2024-07-22 21:32:07 -04:00
gnattools Update ChangeLog and version files for release 2024-05-07 06:52:35 +00:00
gotools Update ChangeLog and version files for release 2024-05-07 06:52:35 +00:00
include Update ChangeLog and version files for release 2024-05-07 06:52:35 +00:00
INSTALL
libada Update ChangeLog and version files for release 2024-05-07 06:52:35 +00:00
libatomic Update ChangeLog and version files for release 2024-05-07 06:52:35 +00:00
libbacktrace Update ChangeLog and version files for release 2024-05-07 06:52:35 +00:00
libcc1 Update ChangeLog and version files for release 2024-05-07 06:52:35 +00:00
libcody Update ChangeLog and version files for release 2024-05-07 06:52:35 +00:00
libcpp Update ChangeLog and version files for release 2024-05-07 06:52:35 +00:00
libdecnumber Update ChangeLog and version files for release 2024-05-07 06:52:35 +00:00
libffi Update ChangeLog and version files for release 2024-05-07 06:52:35 +00:00
libgcc Daily bump. 2024-06-22 00:24:39 +00:00
libgfortran Update ChangeLog and version files for release 2024-05-07 06:52:35 +00:00
libgm2 Update ChangeLog and version files for release 2024-05-07 06:52:35 +00:00
libgo libgo: bump libgo version for GCC 14 release 2024-02-05 11:28:30 -08:00
libgomp Daily bump. 2024-05-09 11:03:31 +00:00
libgrust Update ChangeLog and version files for release 2024-05-07 06:52:35 +00:00
libiberty Update ChangeLog and version files for release 2024-05-07 06:52:35 +00:00
libitm Update ChangeLog and version files for release 2024-05-07 06:52:35 +00:00
libobjc Update ChangeLog and version files for release 2024-05-07 06:52:35 +00:00
libphobos Update ChangeLog and version files for release 2024-05-07 06:52:35 +00:00
libquadmath Update ChangeLog and version files for release 2024-05-07 06:52:35 +00:00
libsanitizer Update ChangeLog and version files for release 2024-05-07 06:52:35 +00:00
libssp Update ChangeLog and version files for release 2024-05-07 06:52:35 +00:00
libstdc++-v3 Daily bump. 2024-07-13 00:23:54 +00:00
libvtv Update ChangeLog and version files for release 2024-05-07 06:52:35 +00:00
lto-plugin Update ChangeLog and version files for release 2024-05-07 06:52:35 +00:00
maintainer-scripts Update ChangeLog and version files for release 2024-05-07 06:52:35 +00:00
zlib Update ChangeLog and version files for release 2024-05-07 06:52:35 +00:00
.dir-locals.el dir-locals: Use https for bug references 2021-07-20 11:40:34 +01:00
.gitattributes Add *.md diff=md. 2020-01-15 14:29:53 +01:00
.gitignore *: add modern gettext 2023-11-14 00:47:11 +01:00
ABOUT-NLS intl: New directory; see intl/ChangeLog for details. 2003-07-04 18:18:54 +00:00
ar-lib Update GCC to autoconf 2.69, automake 1.15.1 (PR bootstrap/82856). 2018-10-31 17:03:16 +00:00
ChangeLog Update ChangeLog and version files for release 2024-05-07 06:52:35 +00:00
ChangeLog.jit Merger of dmalcolm/jit branch from git 2014-11-11 21:55:52 +00:00
ChangeLog.tree-ssa Merge tree-ssa-20020619-branch into mainline. 2004-05-13 02:41:07 -04:00
compile Update from upstream Automake files. 2014-11-16 14:07:13 +00:00
config-ml.in LoongArch: Reimplement multilib build option handling. 2023-09-15 10:42:12 +08:00
config.guess config.sub, config.guess : Import upstream 2021-01-25. 2021-02-23 17:21:10 +08:00
config.rpath Remove freebsd1 from libtool.m4 macros and config.rpath. 2011-02-13 11:45:53 +00:00
config.sub config.sub: change mode to 755. 2021-12-21 09:10:57 +01:00
configure build: Use of cargo not yet supported here in Canadian cross configurations 2024-04-16 09:43:47 +02:00
configure.ac build: Use of cargo not yet supported here in Canadian cross configurations 2024-04-16 09:43:47 +02:00
COPYING COPYING, [...]: Sync from upstream sources. 2005-07-14 01:08:13 +00:00
COPYING.LIB Update COPYING.LIB from upstream. Correct last Changelog. 2005-07-14 01:41:54 +00:00
COPYING.RUNTIME Licensing changes to GPLv3 resp. GPLv3 with GCC Runtime Exception. 2009-04-09 17:00:19 +02:00
COPYING3 COPYING_v3: New file. 2007-07-17 08:37:53 +00:00
COPYING3.LIB COPYING_v3: New file. 2007-07-17 08:37:53 +00:00
depcomp Update from upstream Automake files. 2014-11-16 14:07:13 +00:00
install-sh Update from upstream Automake files. 2014-11-16 14:07:13 +00:00
libtool-ldflags re PR sanitizer/56781 (boostrap-asan failure: fixincl fails to link (missing -lasan)) 2014-04-17 14:23:28 +02:00
libtool.m4 Build: fix error in fixinclude configure 2023-11-22 11:54:33 +01:00
ltgcc.m4 libtool.m4: Update to libtool 2.2.6. 2008-09-26 16:21:02 +00:00
ltmain.sh Do not use HAVE_DOS_BASED_FILE_SYSTEM for Cygwin. 2020-04-17 09:22:51 +02:00
ltoptions.m4 Sync from git Libtool and regenerate. 2009-12-05 17:18:53 +00:00
ltsugar.m4 libtool.m4: Update to libtool 2.2.6. 2008-09-26 16:21:02 +00:00
ltversion.m4 Sync from git Libtool and regenerate. 2009-12-05 17:18:53 +00:00
lt~obsolete.m4 Sync from git Libtool and regenerate. 2009-12-05 17:18:53 +00:00
MAINTAINERS MAINTAINERS: Update my email address 2024-04-04 16:39:52 +02:00
Makefile.def gccrs: Fix missing build dependency 2024-01-16 16:23:02 +01:00
Makefile.in Fix up postboot dependencies [PR106472] 2024-04-02 13:40:27 +02:00
Makefile.tpl Fix up postboot dependencies [PR106472] 2024-04-02 13:40:27 +02:00
missing Update from upstream Automake files. 2014-11-16 14:07:13 +00:00
mkdep merge with /cvs/src 2000-07-22 04:08:22 -04:00
mkinstalldirs Update from upstream Automake files. 2014-11-16 14:07:13 +00:00
move-if-change Update move-if-change from gnulib 2014-11-16 16:12:44 +00:00
multilib.am Update GCC to autoconf 2.69, automake 1.15.1 (PR bootstrap/82856). 2018-10-31 17:03:16 +00:00
README * README: Document use of ranges of years in copyright notices. 2012-07-16 15:01:34 +01:00
SECURITY.txt SECURITY.txt: Drop "exploitable" in reference to hardening issues 2024-01-09 10:49:01 -05:00
symlink-tree COPYING, [...]: Sync from upstream sources. 2005-07-14 01:08:13 +00:00
test-driver Update GCC to autoconf 2.69, automake 1.15.1 (PR bootstrap/82856). 2018-10-31 17:03:16 +00:00
ylwrap Update from upstream Automake files. 2014-11-16 14:07:13 +00:00

This directory contains the GNU Compiler Collection (GCC).

The GNU Compiler Collection is free software.  See the files whose
names start with COPYING for copying permission.  The manuals, and
some of the runtime libraries, are under different terms; see the
individual source files for details.

The directory INSTALL contains copies of the installation information
as HTML and plain text.  The source of this information is
gcc/doc/install.texi.  The installation information includes details
of what is included in the GCC sources and what files GCC installs.

See the file gcc/doc/gcc.texi (together with other files that it
includes) for usage and porting information.  An online readable
version of the manual is in the files gcc/doc/gcc.info*.

See http://gcc.gnu.org/bugs/ for how to report bugs usefully.

Copyright years on GCC source files may be listed using range
notation, e.g., 1987-2012, indicating that every year in the range,
inclusive, is a copyrightable year that could otherwise be listed
individually.