Bug 104537 - ICE when generic-lambda as function parameter fails to be converted to pointer to function
Summary: ICE when generic-lambda as function parameter fails to be converted to pointe...
Status: RESOLVED FIXED
Alias: None
Product: gcc
Classification: Unclassified
Component: c++ (show other bugs)
Version: 12.0
: P3 normal
Target Milestone: 14.0
Assignee: Not yet assigned to anyone
URL:
Keywords: c++-lambda, ice-on-valid-code
Depends on:
Blocks: c++-lambda-decltype
  Show dependency treegraph
 
Reported: 2022-02-15 00:53 UTC by qingzhe huang
Modified: 2024-04-13 08:05 UTC (History)
4 users (show)

See Also:
Host:
Target:
Build:
Known to work:
Known to fail:
Last reconfirmed:


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description qingzhe huang 2022-02-15 00:53:46 UTC
Consider this invalid conversion for this generic-lambda to pointer to function which is defined by "decltype(+[](T&& t )->T{return t+1;}".
This ICE happens when original accepted parameter type changed from "T" to "T&&".
See compiler explorer (https://www.godbolt.org/z/fde1bc3zE)

I suspect this is some related issue with another unconfirmed case PR104358.

template<typename T>
auto foo(T&& t, decltype(+[](T&& t )->T{return t+1;}) lam){
	return lam(t);
}
void test(){
	foo<int>(5, [](int t){return t+1;});
}


<source>:8:21: error: invalid user-defined conversion from 'test()::<lambda(int)>' to 'int (*)(int&&)' [-fpermissive]
    8 |         foo<int>(5, [](int t){return t+1;});
      |                     ^~~~~~~~~~~~~~~~~~~~~~
...
internal compiler error: error reporting routines re-entered.
0x2174365 warning_at(unsigned int, int, char const*, ...)
...
Comment 1 Martin Liška 2022-02-24 11:17:44 UTC
Likely started with r10-4254-ge0d91792eec490d1.
Comment 2 Andrew Pinski 2024-04-13 08:05:02 UTC
Fixed on the trunk by the recent lambda template patches.