| Summary: | [ICE/5.3] sys-devel/gcc-5.3.0: internal compiler error: in create_tmp_var, at gimple-expr.c:519 | ||
|---|---|---|---|
| Product: | Gentoo Linux | Reporter: | Hunter L. Allen <hunter> |
| Component: | [OLD] Development | Assignee: | Gentoo Toolchain Maintainers <toolchain> |
| Status: | RESOLVED OBSOLETE | ||
| Severity: | minor | CC: | kredba |
| Priority: | Normal | ||
| Version: | unspecified | ||
| Hardware: | AMD64 | ||
| OS: | Linux | ||
| URL: | https://gcc.gnu.org/bugzilla/show_bug.cgi?id=77739 | ||
| See Also: |
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=69001 https://gcc.gnu.org/bugzilla/show_bug.cgi?id=77739 |
||
| Whiteboard: | masked in 17.0 profiles | ||
| Package list: | Runtime testing required: | --- | |
| Bug Depends on: | 638030 | ||
| Bug Blocks: | |||
| Attachments: | This is the source that was being compiled. | ||
|
Description
Hunter L. Allen
2015-12-20 19:47:39 UTC
For some reason, a standard string cannot be placed in the labmda expression the way I attempted here. If you change it to a string literal, the source compiles and executes as intended. Fails for me too with almost trunk gcc-5.3.0. Please do report it upstream. I am trying to reduce it. Here is what creduce did:
namespace std {
inline namespace __cxx11 {}
template <typename> class allocator;
namespace __cxx11 {
template <typename _CharT, typename = _CharT, typename = allocator<_CharT>>
class basic_string;
typedef basic_string<char> string;
}
template <typename> class allocator {
public:
template <typename> struct rebind { typedef allocator other; };
};
template <typename _Alloc, typename _Tp> struct __alloctr_rebind {
typedef typename _Alloc::template rebind<_Tp>::other __type;
};
template <typename _Alloc> struct allocator_traits {
typedef decltype(0) pointer;
template <typename _Tp>
using rebind_alloc = typename __alloctr_rebind<_Alloc, _Tp>::__type;
};
}
namespace __gnu_cxx {
template <typename _Alloc>
struct __alloc_traits : std::allocator_traits<_Alloc> {
typedef std::allocator_traits<_Alloc> _Base_type;
template <typename _Tp> struct rebind {
typedef typename _Base_type::template rebind_alloc<_Tp> other;
};
};
}
namespace std {
namespace __cxx11 {
template <typename _CharT, typename, typename _Alloc> class basic_string {
typedef
typename __gnu_cxx::__alloc_traits<_Alloc>::template rebind<_CharT>::other
_Char_alloc_type;
typedef __gnu_cxx::__alloc_traits<_Char_alloc_type> _Alloc_traits;
public:
typedef _Char_alloc_type allocator_type;
typedef typename _Alloc_traits::pointer pointer;
struct _Alloc_hider {
_Alloc_hider(pointer, _Alloc);
} _M_dataplus;
pointer _M_local_data();
allocator_type _M_get_allocator();
basic_string(const basic_string &)
: _M_dataplus(_M_local_data(), _M_get_allocator()) {}
basic_string(_CharT *, _Alloc __a = _Alloc())
: _M_dataplus(_M_local_data(), __a) {}
};
}
}
auto vglambda = [](auto printer) {
return [=](auto &&... ts) { return [=] { printer(ts...); }; };
};
main()
{
vglambda([](auto, auto, auto) {})(std::string(""), "", "");
}
Interesting... This is the first bug I've reported, so... Can you make precise what you mean by "upstream it." I can open it with GCC, if that's what you mean. Interesting... This is the first bug I've reported, so... Can you make precise what you mean by "upstream it." I can open it with GCC, if that's what you mean. Tomáš found an existing GCC bug report and linked it to this your report and I added your finding to it. As requested by Jakub Jelinek I opened a standalone PR69001 for you. https://gcc.gnu.org/bugzilla/show_bug.cgi?id=69001. Upstream bug: Jakub Jelinek 2017-01-10 10:31:16 UTC Fixed with r242766 and r243407 for 6.x. Fixed in 6.4 and future 5.5 Fixed upstream in 6.x |