public inbox for libstdc++@gcc.gnu.org
 help / color / mirror / Atom feed
From: Jonathan Wakely <jwakely@redhat.com>
To: "Arsen Arsenović" <arsen@aarsen.me>
Cc: gcc-patches@gcc.gnu.org, libstdc++@gcc.gnu.org
Subject: Re: [PATCH 2/2] libstdc++: fix generator iterator operator* return type
Date: Tue, 26 Mar 2024 10:59:23 +0000	[thread overview]
Message-ID: <CACb0b4=QZ6cu=ywzEO-XXuYoc2HxwqSQQFnqeZqA+GHAsrZGrA@mail.gmail.com> (raw)
In-Reply-To: <20240323154205.1907790-3-arsen@aarsen.me>

On Sat, 23 Mar 2024 at 15:47, Arsen Arsenović <arsen@aarsen.me> wrote:
>
> Per the standard, the return type of a generators ranges iterator op*
> should be the reference type rather than the yielded type.
>
> The yielded type was used here by mistake.
>
> libstdc++-v3/ChangeLog:
>
>         * include/std/generator (generator::_Iterator::operator*): Fix
>         return type.
>         * testsuite/24_iterators/range_generators/iter_deref_return.cc:
>         New test.
> ---
>  libstdc++-v3/include/std/generator            |  4 +--
>  .../range_generators/iter_deref_return.cc     | 34 +++++++++++++++++++
>  2 files changed, 36 insertions(+), 2 deletions(-)
>  create mode 100644 libstdc++-v3/testsuite/24_iterators/range_generators/iter_deref_return.cc
>
> diff --git a/libstdc++-v3/include/std/generator b/libstdc++-v3/include/std/generator
> index 2d1dcced1e57..789016b5a883 100644
> --- a/libstdc++-v3/include/std/generator
> +++ b/libstdc++-v3/include/std/generator
> @@ -773,12 +773,12 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
>        operator++(int)
>        { this->operator++(); }
>
> -      yielded
> +      _Reference
>        operator*()
>         const noexcept(is_nothrow_move_constructible_v<_Reference>)
>        {
>         auto& __p = this->_M_coro.promise();
> -       return static_cast<yielded>(*__p._M_value());
> +       return static_cast<_Reference>(*__p._M_value());
>        }
>
>      private:
> diff --git a/libstdc++-v3/testsuite/24_iterators/range_generators/iter_deref_return.cc b/libstdc++-v3/testsuite/24_iterators/range_generators/iter_deref_return.cc
> new file mode 100644
> index 000000000000..7bdbf4d489ec
> --- /dev/null
> +++ b/libstdc++-v3/testsuite/24_iterators/range_generators/iter_deref_return.cc
> @@ -0,0 +1,34 @@
> +// { dg-do compile { target c++23 } }
> +// Copyright (C) 2023-2024 Free Software Foundation, Inc.

Just 2024 here.

> +//
> +// This file is part of the GNU ISO C++ Library.  This library is free
> +// software; you can redistribute it and/or modify it under the
> +// terms of the GNU General Public License as published by the
> +// Free Software Foundation; either version 3, or (at your option)
> +// any later version.
> +
> +// This library is distributed in the hope that it will be useful,
> +// but WITHOUT ANY WARRANTY; without even the implied warranty of
> +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
> +// GNU General Public License for more details.
> +
> +// Under Section 7 of GPL version 3, you are granted additional
> +// permissions described in the GCC Runtime Library Exception, version
> +// 3.1, as published by the Free Software Foundation.
> +
> +// You should have received a copy of the GNU General Public License and
> +// a copy of the GCC Runtime Library Exception along with this program;
> +// see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
> +// <http://www.gnu.org/licenses/>.


I don't think we want the last two paragraphs about the runtime
exception. That's relevant to code being compiled into the users
binary as inline functions or templates, which doesn't matter for
testcases.

I see we have 10 existing tests that use the runtime exception text,
which I'll fix. For comparison, there are 9000 tests with the GPL
text, so the vast majority don't have the exception.

OK for trunk with the copyright date fixed and the exception text
dropped, thanks.

> +
> +#include <generator>
> +
> +// Check that the return type of iterator::operator* is the reference type.
> +// Pre-op* return type fix, this'd have resulted in a op* return type of const
> +// bool&.
> +
> +std::generator<bool, bool>
> +foo();
> +
> +static_assert(std::is_same_v<decltype(*foo().begin()), bool>);
> +static_assert(std::is_same_v<typename decltype(foo())::yielded, const bool&>);
> --
> 2.44.0
>


      reply	other threads:[~2024-03-26 10:59 UTC|newest]

Thread overview: 5+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2024-03-23 15:15 [PATCH 0/2] A few minor fixes in <generator> Arsen Arsenović
2024-03-23 15:15 ` [PATCH 1/2] libstdc++: fix _V badname " Arsen Arsenović
2024-03-26 11:00   ` Jonathan Wakely
2024-03-23 15:15 ` [PATCH 2/2] libstdc++: fix generator iterator operator* return type Arsen Arsenović
2024-03-26 10:59   ` Jonathan Wakely [this message]

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to='CACb0b4=QZ6cu=ywzEO-XXuYoc2HxwqSQQFnqeZqA+GHAsrZGrA@mail.gmail.com' \
    --to=jwakely@redhat.com \
    --cc=arsen@aarsen.me \
    --cc=gcc-patches@gcc.gnu.org \
    --cc=libstdc++@gcc.gnu.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).