http://gcc.gnu.org/bugzilla/show_bug.cgi?id=56268
Bug #: 56268
Summary: [4.7/4.8 Regression] C++11 ICE with boost
multi-precision and boost variant during assignment
Classification: Unclassified
Product: gcc
Version: 4.8.0
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: c++
AssignedTo: [email protected]
ReportedBy: [email protected]
Created attachment 29402
--> http://gcc.gnu.org/bugzilla/attachment.cgi?id=29402
Sample code to reproduce the problem
This issue is quite similar to bug 55842.
Compiling the attached sample file leads to an internal compiler error.
The problem only occurs with GCC-4.7 from Debian Unstable 4.7.2-5 and the
upcoming 4.8 from Debian Experimental 4.8-20130127-1. Tested on an amd64
system. (GCC 4.6 works, properly.)
I'm using a checkout of the latest boost release tree.
The command to reproduce the issue is:
gcc-4.8 -std=c++11 -c -I/src/boost/release test.cpp
In file included from /src/boost/release/boost/config.hpp:57:0,
from /src/boost/release/boost/variant/detail/config.hpp:16,
from /src/boost/release/boost/variant/variant.hpp:23,
from /src/boost/release/boost/variant.hpp:17,
from test.cpp:2:
/src/boost/release/boost/type_traits/has_nothrow_copy.hpp: In instantiation of
'const bool
boost::detail::has_nothrow_copy_imp<boost::multiprecision::number<boost::multiprecision::backends::cpp_int_backend<64u,
0u> > >::value':
/src/boost/release/boost/type_traits/has_nothrow_copy.hpp:32:1: required from
'struct
boost::has_nothrow_copy<boost::multiprecision::number<boost::multiprecision::backends::cpp_int_backend<64u,
0u> > >'
/src/boost/release/boost/variant/variant.hpp:1908:17: required from 'void
boost::variant<T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
T15, T16, T17, T18, T19>::assigner::internal_visit(const RhsT&, int) [with RhsT
=
boost::multiprecision::number<boost::multiprecision::backends::cpp_int_backend<64u,
0u> >; T0_ =
boost::multiprecision::number<boost::multiprecision::backends::cpp_int_backend<64u,
0u> >; T1 = boost::detail::variant::void_; T2 = boost::detail::variant::void_;
T3 = boost::detail::variant::void_; T4 = boost::detail::variant::void_; T5 =
boost::detail::variant::void_; T6 = boost::detail::variant::void_; T7 =
boost::detail::variant::void_; T8 = boost::detail::variant::void_; T9 =
boost::detail::variant::void_; T10 = boost::detail::variant::void_; T11 =
boost::detail::variant::void_; T12 = boost::detail::variant::void_; T13 =
boost::detail::variant::void_; T14 = boost::detail::variant::void_; T15 =
boost::detail::variant::void_; T16 = boost::detail::variant::void_; T17 =
boost::detail::variant::void_; T18 = boost::detail::variant::void_; T19 =
boost::detail::variant::void_]'
/src/boost/release/boost/variant/detail/visitation_impl.hpp:130:9: required
from 'typename Visitor::result_type
boost::detail::variant::visitation_impl_invoke_impl(int, Visitor&, VoidPtrCV,
T*, mpl_::true_) [with Visitor =
boost::variant<boost::multiprecision::number<boost::multiprecision::backends::cpp_int_backend<64u,
0u> > >::assigner; VoidPtrCV = const void*; T =
boost::multiprecision::number<boost::multiprecision::backends::cpp_int_backend<64u,
0u> >; typename Visitor::result_type = void; mpl_::true_ = mpl_::bool_<true>]'
/src/boost/release/boost/variant/detail/visitation_impl.hpp:173:9: required
from 'typename Visitor::result_type
boost::detail::variant::visitation_impl_invoke(int, Visitor&, VoidPtrCV, T*,
NoBackupFlag, int) [with Visitor =
boost::variant<boost::multiprecision::number<boost::multiprecision::backends::cpp_int_backend<64u,
0u> > >::assigner; VoidPtrCV = const void*; T =
boost::multiprecision::number<boost::multiprecision::backends::cpp_int_backend<64u,
0u> >; NoBackupFlag =
boost::variant<boost::multiprecision::number<boost::multiprecision::backends::cpp_int_backend<64u,
0u> > >::has_fallback_type_; typename Visitor::result_type = void]'
/src/boost/release/boost/variant/detail/visitation_impl.hpp:256:5: required
from 'typename Visitor::result_type
boost::detail::variant::visitation_impl(int, int, Visitor&, VoidPtrCV,
mpl_::false_, NoBackupFlag, Which*, step0*) [with Which = mpl_::int_<0>; step0
=
boost::detail::variant::visitation_impl_step<boost::mpl::l_iter<boost::mpl::l_item<mpl_::long_<1l>,
boost::multiprecision::number<boost::multiprecision::backends::cpp_int_backend<64u,
0u> >, boost::mpl::l_end> >, boost::mpl::l_iter<boost::mpl::l_end> >; Visitor =
boost::variant<boost::multiprecision::number<boost::multiprecision::backends::cpp_int_backend<64u,
0u> > >::assigner; VoidPtrCV = const void*; NoBackupFlag =
boost::variant<boost::multiprecision::number<boost::multiprecision::backends::cpp_int_backend<64u,
0u> > >::has_fallback_type_; typename Visitor::result_type = void; mpl_::false_
= mpl_::bool_<false>]'
/src/boost/release/boost/variant/variant.hpp:2326:13: required from 'static
typename Visitor::result_type boost::variant<T0, T1, T2, T3, T4, T5, T6, T7,
T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18,
T19>::internal_apply_visitor_impl(int, int, Visitor&, VoidPtrCV) [with Visitor
=
boost::variant<boost::multiprecision::number<boost::multiprecision::backends::cpp_int_backend<64u,
0u> > >::assigner; VoidPtrCV = const void*; T0_ =
boost::multiprecision::number<boost::multiprecision::backends::cpp_int_backend<64u,
0u> >; T1 = boost::detail::variant::void_; T2 = boost::detail::variant::void_;
T3 = boost::detail::variant::void_; T4 = boost::detail::variant::void_; T5 =
boost::detail::variant::void_; T6 = boost::detail::variant::void_; T7 =
boost::detail::variant::void_; T8 = boost::detail::variant::void_; T9 =
boost::detail::variant::void_; T10 = boost::detail::variant::void_; T11 =
boost::detail::variant::void_; T12 = boost::detail::variant::void_; T13 =
boost::detail::variant::void_; T14 = boost::detail::variant::void_; T15 =
boost::detail::variant::void_; T16 = boost::detail::variant::void_; T17 =
boost::detail::variant::void_; T18 = boost::detail::variant::void_; T19 =
boost::detail::variant::void_; typename Visitor::result_type = void]'
/src/boost/release/boost/variant/variant.hpp:2348:13: required from 'typename
Visitor::result_type boost::variant<T0, T1, T2, T3, T4, T5, T6, T7, T8, T9,
T10, T11, T12, T13, T14, T15, T16, T17, T18,
T19>::internal_apply_visitor(Visitor&) const [with Visitor =
boost::variant<boost::multiprecision::number<boost::multiprecision::backends::cpp_int_backend<64u,
0u> > >::assigner; T0_ =
boost::multiprecision::number<boost::multiprecision::backends::cpp_int_backend<64u,
0u> >; T1 = boost::detail::variant::void_; T2 = boost::detail::variant::void_;
T3 = boost::detail::variant::void_; T4 = boost::detail::variant::void_; T5 =
boost::detail::variant::void_; T6 = boost::detail::variant::void_; T7 =
boost::detail::variant::void_; T8 = boost::detail::variant::void_; T9 =
boost::detail::variant::void_; T10 = boost::detail::variant::void_; T11 =
boost::detail::variant::void_; T12 = boost::detail::variant::void_; T13 =
boost::detail::variant::void_; T14 = boost::detail::variant::void_; T15 =
boost::detail::variant::void_; T16 = boost::detail::variant::void_; T17 =
boost::detail::variant::void_; T18 = boost::detail::variant::void_; T19 =
boost::detail::variant::void_; typename Visitor::result_type = void]'
/src/boost/release/boost/variant/variant.hpp:2091:13: required from 'void
boost::variant<T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
T15, T16, T17, T18, T19>::variant_assign(const boost::variant<T0, T1, T2, T3,
T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19>&)
[with T0_ =
boost::multiprecision::number<boost::multiprecision::backends::cpp_int_backend<64u,
0u> >; T1 = boost::detail::variant::void_; T2 = boost::detail::variant::void_;
T3 = boost::detail::variant::void_; T4 = boost::detail::variant::void_; T5 =
boost::detail::variant::void_; T6 = boost::detail::variant::void_; T7 =
boost::detail::variant::void_; T8 = boost::detail::variant::void_; T9 =
boost::detail::variant::void_; T10 = boost::detail::variant::void_; T11 =
boost::detail::variant::void_; T12 = boost::detail::variant::void_; T13 =
boost::detail::variant::void_; T14 = boost::detail::variant::void_; T15 =
boost::detail::variant::void_; T16 = boost::detail::variant::void_; T17 =
boost::detail::variant::void_; T18 = boost::detail::variant::void_; T19 =
boost::detail::variant::void_]'
/src/boost/release/boost/variant/variant.hpp:2175:27: required from
'boost::variant<T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
T14, T15, T16, T17, T18, T19>& boost::variant<T0, T1, T2, T3, T4, T5, T6, T7,
T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19>::operator=(const
boost::variant<T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
T15, T16, T17, T18, T19>&) [with T0_ =
boost::multiprecision::number<boost::multiprecision::backends::cpp_int_backend<64u,
0u> >; T1 = boost::detail::variant::void_; T2 = boost::detail::variant::void_;
T3 = boost::detail::variant::void_; T4 = boost::detail::variant::void_; T5 =
boost::detail::variant::void_; T6 = boost::detail::variant::void_; T7 =
boost::detail::variant::void_; T8 = boost::detail::variant::void_; T9 =
boost::detail::variant::void_; T10 = boost::detail::variant::void_; T11 =
boost::detail::variant::void_; T12 = boost::detail::variant::void_; T13 =
boost::detail::variant::void_; T14 = boost::detail::variant::void_; T15 =
boost::detail::variant::void_; T16 = boost::detail::variant::void_; T17 =
boost::detail::variant::void_; T18 = boost::detail::variant::void_; T19 =
boost::detail::variant::void_]'
test.cpp:16:4: required from here
/src/boost/release/boost/type_traits/intrinsics.hpp:210:83: internal compiler
error: in nothrow_spec_p, at cp/except.c:1263
# define BOOST_HAS_NOTHROW_COPY(T) ((__has_nothrow_copy(T)
BOOST_INTEL_TT_OPTS) && !is_volatile<T>::value && !is_reference<T>::value)
^
/src/boost/release/boost/type_traits/has_nothrow_copy.hpp:24:40: note: in
expansion of macro 'BOOST_HAS_NOTHROW_COPY'
BOOST_STATIC_CONSTANT(bool, value = BOOST_HAS_NOTHROW_COPY(T));
^
Please submit a full bug report,
with preprocessed source if appropriate.
See <file:///usr/share/doc/gcc-4.8/README.Bugs> for instructions.
Preprocessed source stored into /tmp/ccJawS1z.out file, please attach this to
your bugreport.