Summary: | [4.8 Regression] 20_util/function/cons/callable.cc failed with -m32 -march=corei7 | ||
---|---|---|---|
Product: | gcc | Reporter: | H.J. Lu <hjl.tools> |
Component: | c++ | Assignee: | Not yet assigned to anyone <unassigned> |
Status: | RESOLVED DUPLICATE | ||
Severity: | normal | CC: | marc.glisse, redi |
Priority: | P3 | ||
Version: | 4.8.0 | ||
Target Milestone: | 4.8.0 | ||
Host: | Target: | ||
Build: | Known to work: | ||
Known to fail: | Last reconfirmed: | 2012-05-01 00:00:00 | |
Attachments: | testcase |
Description
H.J. Lu
2012-05-01 19:51:54 UTC
mine Created attachment 27277 [details]
testcase
I was seeing an ICE in the same place with an earlier version of the changes which caused this testcase regression. I have only managed to reduce it to 10k lines so far - that delta-reduced file is attached, I haven't had time to try manually reducing it.
Presumably fixing the ICE for this file will also fix it for this the testcase regression.
Unassigning myself. I don't think there's any more I can do beyond providing the testcase. Let me know if my patch needs to be reverted. (In reply to comment #2) > I was seeing an ICE in the same place with an earlier version of the changes > which caused this testcase regression. I have only managed to reduce it to 10k > lines so far - that delta-reduced file is attached, I haven't had time to try > manually reducing it. If you only want a small example causing the ICE, here is one (-std=c++0x is enough, no need for -m32 or -march). If you want something that looks vaguely like a valid C++ program, it's going to be bigger... extern "C++" namespace __attribute__ ) template < } template < typename > struct add_rvalue_reference ; template < _Tp > typename declval ( ) noexcept ; struct { typedef long __type } struct { } template < typename _Res , typename ... _ArgTypes > class function < _Res ( _ArgTypes ) { _Signature_type ( _ArgTypes ) template < typename _Functor > using _Invoke decltype ( ( declval < _Functor > ) ) template < typename , typename > struct _CheckResult { } template < ; template < typename _Functor > using _Callable _CheckResult < _Invoke < _Functor > , _Res > template < typename , typename > using _Requires template < typename _Functor , typename = _Requires < _Callable < _Functor > , void > > function ( _Functor ; } ; f ( function < void > ) { f ( [ ] ) Thanks, Marc! |