public inbox for gcc-bugs@sourceware.org
help / color / mirror / Atom feed
* [Bug c++/105623] New: [12/13 regression][rejects valid] invalid use of auto when deducing return type of base class template
@ 2022-05-16 21:35 hello at josephloser dot com
  2022-05-16 21:42 ` [Bug c++/105623] " mpolacek at gcc dot gnu.org
                   ` (7 more replies)
  0 siblings, 8 replies; 9+ messages in thread
From: hello at josephloser dot com @ 2022-05-16 21:35 UTC (permalink / raw)
  To: gcc-bugs

https://gcc.gnu.org/bugzilla/show_bug.cgi?id=105623

            Bug ID: 105623
           Summary: [12/13 regression][rejects valid] invalid use of auto
                    when deducing return type of base class template
           Product: gcc
           Version: 13.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: c++
          Assignee: unassigned at gcc dot gnu.org
          Reporter: hello at josephloser dot com
  Target Milestone: ---

The following code used to work in GCC 11.3.0, but fails on GCC 12.1.0 and
trunk.

```
#include <string_view>

constexpr auto g(auto name_fn)  {
    return name_fn();
}

template <char... Cs> struct ct_string {
    static constexpr char str[] = {Cs..., 0};
    static constexpr auto name() { return std::string_view{str, sizeof...(Cs)};
}
};

struct S : ct_string<'f', 'o', 'o'> {
    constexpr auto f() {
        return g(name);
    }
};

int main() {
    {
        S s;
        [[maybe_unused]] constexpr auto name = s.f();
    }

    return 0;
}
```


This code works on GCC 11.3.0 but fails on GCC 12.1.0 onward, including trunk.
See it live at https://godbolt.org/z/9c8vb1eP5

One workaround is to explicitly provide the return type for `ct_string::foo`
static function such as at https://godbolt.org/z/ccqPxoM5P which works on GCC
11.3.0, 12.1.0, and trunk.

^ permalink raw reply	[flat|nested] 9+ messages in thread

* [Bug c++/105623] [12/13 regression][rejects valid] invalid use of auto when deducing return type of base class template
  2022-05-16 21:35 [Bug c++/105623] New: [12/13 regression][rejects valid] invalid use of auto when deducing return type of base class template hello at josephloser dot com
@ 2022-05-16 21:42 ` mpolacek at gcc dot gnu.org
  2022-05-16 22:05 ` mpolacek at gcc dot gnu.org
                   ` (6 subsequent siblings)
  7 siblings, 0 replies; 9+ messages in thread
From: mpolacek at gcc dot gnu.org @ 2022-05-16 21:42 UTC (permalink / raw)
  To: gcc-bugs

https://gcc.gnu.org/bugzilla/show_bug.cgi?id=105623

Marek Polacek <mpolacek at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
   Target Milestone|---                         |12.2
             Status|UNCONFIRMED                 |NEW
   Last reconfirmed|                            |2022-05-16
           Priority|P3                          |P2
           Keywords|                            |rejects-valid
                 CC|                            |jason at gcc dot gnu.org,
                   |                            |mpolacek at gcc dot gnu.org
     Ever confirmed|0                           |1

--- Comment #1 from Marek Polacek <mpolacek at gcc dot gnu.org> ---
Seems to have started with r12-1273-g1a98f830332e5a

I'll try to reduce.

^ permalink raw reply	[flat|nested] 9+ messages in thread

* [Bug c++/105623] [12/13 regression][rejects valid] invalid use of auto when deducing return type of base class template
  2022-05-16 21:35 [Bug c++/105623] New: [12/13 regression][rejects valid] invalid use of auto when deducing return type of base class template hello at josephloser dot com
  2022-05-16 21:42 ` [Bug c++/105623] " mpolacek at gcc dot gnu.org
@ 2022-05-16 22:05 ` mpolacek at gcc dot gnu.org
  2022-05-16 22:23 ` davidfromonline at gmail dot com
                   ` (5 subsequent siblings)
  7 siblings, 0 replies; 9+ messages in thread
From: mpolacek at gcc dot gnu.org @ 2022-05-16 22:05 UTC (permalink / raw)
  To: gcc-bugs

https://gcc.gnu.org/bugzilla/show_bug.cgi?id=105623

--- Comment #2 from Marek Polacek <mpolacek at gcc dot gnu.org> ---
// PR c++/105623

auto g(auto) {}
template <int...> struct ct_string {
  static auto name() {}
};
struct S : ct_string<> {
  auto f() { g(name); }
};

^ permalink raw reply	[flat|nested] 9+ messages in thread

* [Bug c++/105623] [12/13 regression][rejects valid] invalid use of auto when deducing return type of base class template
  2022-05-16 21:35 [Bug c++/105623] New: [12/13 regression][rejects valid] invalid use of auto when deducing return type of base class template hello at josephloser dot com
  2022-05-16 21:42 ` [Bug c++/105623] " mpolacek at gcc dot gnu.org
  2022-05-16 22:05 ` mpolacek at gcc dot gnu.org
@ 2022-05-16 22:23 ` davidfromonline at gmail dot com
  2022-05-24 20:10 ` jason at gcc dot gnu.org
                   ` (4 subsequent siblings)
  7 siblings, 0 replies; 9+ messages in thread
From: davidfromonline at gmail dot com @ 2022-05-16 22:23 UTC (permalink / raw)
  To: gcc-bugs

https://gcc.gnu.org/bugzilla/show_bug.cgi?id=105623

--- Comment #3 from David Stone <davidfromonline at gmail dot com> ---
Simplified reproduction:

```
auto g(auto fn) {
        return fn();
}

template<typename>
struct base {
        static auto value() {
                return 0;
        }
};

struct S : base<void> {
        static auto f() -> int {
                return g(value);
        }
};
```

See it live: https://godbolt.org/z/18n8M8oG9

An additional workaround is to explicitly take the address of the function in
line 14 of my reproducer: `return g(&value);`.

^ permalink raw reply	[flat|nested] 9+ messages in thread

* [Bug c++/105623] [12/13 regression][rejects valid] invalid use of auto when deducing return type of base class template
  2022-05-16 21:35 [Bug c++/105623] New: [12/13 regression][rejects valid] invalid use of auto when deducing return type of base class template hello at josephloser dot com
                   ` (2 preceding siblings ...)
  2022-05-16 22:23 ` davidfromonline at gmail dot com
@ 2022-05-24 20:10 ` jason at gcc dot gnu.org
  2022-05-25 15:09 ` cvs-commit at gcc dot gnu.org
                   ` (3 subsequent siblings)
  7 siblings, 0 replies; 9+ messages in thread
From: jason at gcc dot gnu.org @ 2022-05-24 20:10 UTC (permalink / raw)
  To: gcc-bugs

https://gcc.gnu.org/bugzilla/show_bug.cgi?id=105623

Jason Merrill <jason at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
           Assignee|unassigned at gcc dot gnu.org      |jason at gcc dot gnu.org
             Status|NEW                         |ASSIGNED

^ permalink raw reply	[flat|nested] 9+ messages in thread

* [Bug c++/105623] [12/13 regression][rejects valid] invalid use of auto when deducing return type of base class template
  2022-05-16 21:35 [Bug c++/105623] New: [12/13 regression][rejects valid] invalid use of auto when deducing return type of base class template hello at josephloser dot com
                   ` (3 preceding siblings ...)
  2022-05-24 20:10 ` jason at gcc dot gnu.org
@ 2022-05-25 15:09 ` cvs-commit at gcc dot gnu.org
  2022-05-25 17:08 ` jason at gcc dot gnu.org
                   ` (2 subsequent siblings)
  7 siblings, 0 replies; 9+ messages in thread
From: cvs-commit at gcc dot gnu.org @ 2022-05-25 15:09 UTC (permalink / raw)
  To: gcc-bugs

https://gcc.gnu.org/bugzilla/show_bug.cgi?id=105623

--- Comment #4 from CVS Commits <cvs-commit at gcc dot gnu.org> ---
The master branch has been updated by Jason Merrill <jason@gcc.gnu.org>:

https://gcc.gnu.org/g:850a9ce8bcca59c7efabcdeeca14c5bd905e8363

commit r13-768-g850a9ce8bcca59c7efabcdeeca14c5bd905e8363
Author: Jason Merrill <jason@redhat.com>
Date:   Tue May 24 17:37:58 2022 -0400

    c++: deduction from auto fn [PR105623]

    Since my patch for PR90451, we defer mark_used of single functions as late
    as possible.  And since my r12-1273, we keep BASELINK from lookup around
    rather than reconstruct it later.  These both made us try to instantiate g
    with a function type that still had 'auto' as its return type.

            PR c++/105623

    gcc/cp/ChangeLog:

            * decl2.cc (mark_used): Copy type from fn to BASELINK.
            * pt.cc (unify_one_argument): Call mark_single_function.

    gcc/testsuite/ChangeLog:

            * g++.dg/cpp1y/auto-fn62.C: New test.

^ permalink raw reply	[flat|nested] 9+ messages in thread

* [Bug c++/105623] [12/13 regression][rejects valid] invalid use of auto when deducing return type of base class template
  2022-05-16 21:35 [Bug c++/105623] New: [12/13 regression][rejects valid] invalid use of auto when deducing return type of base class template hello at josephloser dot com
                   ` (4 preceding siblings ...)
  2022-05-25 15:09 ` cvs-commit at gcc dot gnu.org
@ 2022-05-25 17:08 ` jason at gcc dot gnu.org
  2022-05-31 19:31 ` cvs-commit at gcc dot gnu.org
  2022-05-31 19:32 ` jason at gcc dot gnu.org
  7 siblings, 0 replies; 9+ messages in thread
From: jason at gcc dot gnu.org @ 2022-05-25 17:08 UTC (permalink / raw)
  To: gcc-bugs

https://gcc.gnu.org/bugzilla/show_bug.cgi?id=105623

Jason Merrill <jason at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
                 CC|                            |j-l.wynen at hotmail dot de

--- Comment #5 from Jason Merrill <jason at gcc dot gnu.org> ---
*** Bug 105716 has been marked as a duplicate of this bug. ***

^ permalink raw reply	[flat|nested] 9+ messages in thread

* [Bug c++/105623] [12/13 regression][rejects valid] invalid use of auto when deducing return type of base class template
  2022-05-16 21:35 [Bug c++/105623] New: [12/13 regression][rejects valid] invalid use of auto when deducing return type of base class template hello at josephloser dot com
                   ` (5 preceding siblings ...)
  2022-05-25 17:08 ` jason at gcc dot gnu.org
@ 2022-05-31 19:31 ` cvs-commit at gcc dot gnu.org
  2022-05-31 19:32 ` jason at gcc dot gnu.org
  7 siblings, 0 replies; 9+ messages in thread
From: cvs-commit at gcc dot gnu.org @ 2022-05-31 19:31 UTC (permalink / raw)
  To: gcc-bugs

https://gcc.gnu.org/bugzilla/show_bug.cgi?id=105623

--- Comment #6 from CVS Commits <cvs-commit at gcc dot gnu.org> ---
The releases/gcc-12 branch has been updated by Jason Merrill
<jason@gcc.gnu.org>:

https://gcc.gnu.org/g:d90576952356735a2152c318ef1d60221b958b15

commit r12-8441-gd90576952356735a2152c318ef1d60221b958b15
Author: Jason Merrill <jason@redhat.com>
Date:   Tue May 24 17:37:58 2022 -0400

    c++: deduction from auto fn [PR105623]

    Since my patch for PR90451, we defer mark_used of single functions as late
    as possible.  And since my r12-1273, we keep BASELINK from lookup around
    rather than reconstruct it later.  These both made us try to instantiate g
    with a function type that still had 'auto' as its return type.

            PR c++/105623

    gcc/cp/ChangeLog:

            * decl2.cc (mark_used): Copy type from fn to BASELINK.
            * pt.cc (unify_one_argument): Call mark_single_function.

    gcc/testsuite/ChangeLog:

            * g++.dg/cpp1y/auto-fn62.C: New test.

^ permalink raw reply	[flat|nested] 9+ messages in thread

* [Bug c++/105623] [12/13 regression][rejects valid] invalid use of auto when deducing return type of base class template
  2022-05-16 21:35 [Bug c++/105623] New: [12/13 regression][rejects valid] invalid use of auto when deducing return type of base class template hello at josephloser dot com
                   ` (6 preceding siblings ...)
  2022-05-31 19:31 ` cvs-commit at gcc dot gnu.org
@ 2022-05-31 19:32 ` jason at gcc dot gnu.org
  7 siblings, 0 replies; 9+ messages in thread
From: jason at gcc dot gnu.org @ 2022-05-31 19:32 UTC (permalink / raw)
  To: gcc-bugs

https://gcc.gnu.org/bugzilla/show_bug.cgi?id=105623

Jason Merrill <jason at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
             Status|ASSIGNED                    |RESOLVED
         Resolution|---                         |FIXED

--- Comment #7 from Jason Merrill <jason at gcc dot gnu.org> ---
Fixed for 12.2/13.

^ permalink raw reply	[flat|nested] 9+ messages in thread

end of thread, other threads:[~2022-05-31 19:32 UTC | newest]

Thread overview: 9+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2022-05-16 21:35 [Bug c++/105623] New: [12/13 regression][rejects valid] invalid use of auto when deducing return type of base class template hello at josephloser dot com
2022-05-16 21:42 ` [Bug c++/105623] " mpolacek at gcc dot gnu.org
2022-05-16 22:05 ` mpolacek at gcc dot gnu.org
2022-05-16 22:23 ` davidfromonline at gmail dot com
2022-05-24 20:10 ` jason at gcc dot gnu.org
2022-05-25 15:09 ` cvs-commit at gcc dot gnu.org
2022-05-25 17:08 ` jason at gcc dot gnu.org
2022-05-31 19:31 ` cvs-commit at gcc dot gnu.org
2022-05-31 19:32 ` jason at gcc dot gnu.org

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).