[Bug c++/98990] [10/11 Regression] ICE when two overloaded functions return `auto &&` and one accepts an `auto` parameter since r10-6571-ga6ee556c7659877b
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=98990 --- Comment #5 from CVS Commits --- The master branch has been updated by Patrick Palka : https://gcc.gnu.org/g:6bd409cfc83683a9be5c6b3b8f9a3ec8959f9356 commit r11-7409-g6bd409cfc83683a9be5c6b3b8f9a3ec8959f9356 Author: Patrick Palka Date: Thu Feb 25 19:55:43 2021 -0500 c++: abbreviated function template return type rewriting [PR98990] When an abbreviated function template has a complex placeholder return type such auto& or auto**, the level adjustment performed by splice_late_return_type directly replaces the 'auto' inside the original return type with the level-adjusted 'auto', but that breaks TYPE_CANONICAL caching. Instead, we should rebuild the entire return type using the adjusted 'auto'. This patch makes this happen by tsubsting the original return type with an argument vector that maps the original 'auto' to the adjusted 'auto'. In passing, this patch also reverts the misguided changes to find_type_usage in r10-6571 that made find_type_usage return a tree* instead of a tree so as to discourage this kind of in-place type modification. It occurred to me that the constraint also needs to be rebuilt so that it refers to the adjusted 'auto', but this oversight doesn't seem to cause any issues at the moment due to how do_auto_deduction "manually" substitutes the 'auto' inside the constraint before performing satisfaction. So this'll be fixed later as part of a rework of placeholder type constraint checking. gcc/cp/ChangeLog: PR c++/98990 * pt.c (splice_late_return_type): Rebuild the entire return type if we have to adjust the level of an auto within. (type_uses_auto): Adjust call to find_type_usage. * type-utils.h (find_type_usage): Revert r10-6571 change that made this function return a pointer to the auto node. gcc/testsuite/ChangeLog: PR c++/98990 * g++.dg/concepts/abbrev8.C: New test.
[Bug c++/98990] [10/11 Regression] ICE when two overloaded functions return `auto &&` and one accepts an `auto` parameter since r10-6571-ga6ee556c7659877b
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=98990 Patrick Palka changed: What|Removed |Added Status|NEW |ASSIGNED Assignee|unassigned at gcc dot gnu.org |ppalka at gcc dot gnu.org --- Comment #4 from Patrick Palka --- (In reply to Jason Merrill from comment #3) > (In reply to Martin Liška from comment #2) > > With -fchecking, it started with a6ee556c7659877b. > > i.e. r10-6571 > > The problem is that splice_late_return_type is changing the TREE_TYPE of a > REFERENCE_TYPE without also updating its TYPE_CANONICAL, which breaks; we > need to rebuild the type instead. I expect that tsubst would do the trick, > as in do_auto_deduction. Want to take this, Patrick? Ah, that makes sense. Yes, I'll take it :)
[Bug c++/98990] [10/11 Regression] ICE when two overloaded functions return `auto &&` and one accepts an `auto` parameter since r10-6571-ga6ee556c7659877b
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=98990 Jason Merrill changed: What|Removed |Added Status|ASSIGNED|NEW Assignee|jason at gcc dot gnu.org |unassigned at gcc dot gnu.org --- Comment #3 from Jason Merrill --- (In reply to Martin Liška from comment #2) > With -fchecking, it started with a6ee556c7659877b. i.e. r10-6571 The problem is that splice_late_return_type is changing the TREE_TYPE of a REFERENCE_TYPE without also updating its TYPE_CANONICAL, which breaks; we need to rebuild the type instead. I expect that tsubst would do the trick, as in do_auto_deduction. Want to take this, Patrick?
[Bug c++/98990] [10/11 Regression] ICE when two overloaded functions return `auto &&` and one accepts an `auto` parameter since r10-6571-ga6ee556c7659877b
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=98990 Jason Merrill changed: What|Removed |Added Status|NEW |ASSIGNED CC||jason at gcc dot gnu.org Assignee|unassigned at gcc dot gnu.org |jason at gcc dot gnu.org
[Bug c++/98990] [10/11 Regression] ICE when two overloaded functions return `auto &&` and one accepts an `auto` parameter since r10-6571-ga6ee556c7659877b
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=98990 Richard Biener changed: What|Removed |Added Keywords||ice-checking, ||ice-on-valid-code Priority|P3 |P2 Target Milestone|--- |10.3
[Bug c++/98990] [10/11 Regression] ICE when two overloaded functions return `auto &&` and one accepts an `auto` parameter since r10-6571-ga6ee556c7659877b
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=98990 Martin Liška changed: What|Removed |Added Summary|Internal compiler error |[10/11 Regression] ICE when |when two overloaded |two overloaded functions |functions return `auto &&` |return `auto &&` and one |and one accepts an `auto` |accepts an `auto` parameter |parameter |since ||r10-6571-ga6ee556c7659877b Last reconfirmed||2021-02-08 Ever confirmed|0 |1 CC||marxin at gcc dot gnu.org, ||ppalka at gcc dot gnu.org Status|UNCONFIRMED |NEW --- Comment #2 from Martin Liška --- With -fchecking, it started with a6ee556c7659877b.