Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

v1.0-beta ICEs with GCC9 #1011

Closed
h-2 opened this issue Jan 28, 2019 · 5 comments
Closed

v1.0-beta ICEs with GCC9 #1011

h-2 opened this issue Jan 28, 2019 · 5 comments

Comments

@h-2
Copy link
Contributor

h-2 commented Jan 28, 2019

There are multiple ICEs with current snapshots of GCC9 in the 1.0 branch. Note that this is even in c++17 mode without -fconcepts:

  1. ICE in utility.variant
h4nn3s@celegans ~/devel/range-v3-build/debug % gmake utility.variant
Building CXX object test/utility/CMakeFiles/utility.variant.dir/variant.cpp.o
In file included from /home/mi/h4nn3s/devel/range-v3/test/utility/variant.cpp:15:
/home/mi/h4nn3s/devel/range-v3/include/range/v3/functional/overload.hpp: In instantiation of 'struct ranges::overloaded<main()::<lambda(int&)>, main()::<lambda(std::string&)> >':
/home/mi/h4nn3s/devel/range-v3/test/utility/variant.cpp:130:70:   required from here
/home/mi/h4nn3s/devel/range-v3/include/range/v3/functional/overload.hpp:31:12: internal compiler error: Segmentation fault
   31 |     struct overloaded<First, Rest...>
      |            ^~~~~~~~~~~~~~~~~~~~~~~~~~
Please submit a full bug report,
with preprocessed source if appropriate.
See <https://gcc.gnu.org/bugs/> for instructions.
gmake[3]: *** [test/utility/CMakeFiles/utility.variant.dir/build.make:63: test/utility/CMakeFiles/utility.variant.dir/variant.cpp.o] Fehler 1
gmake[2]: *** [CMakeFiles/Makefile2:16576: test/utility/CMakeFiles/utility.variant.dir/all] Fehler 2
gmake[1]: *** [CMakeFiles/Makefile2:16588: test/utility/CMakeFiles/utility.variant.dir/rule] Fehler 2
gmake: *** [Makefile:6272: utility.variant] Fehler 2
  1. A bunch of views, e.g. view::concat trigger the following:
In file included from /home/mi/h4nn3s/devel/range-v3/include/range/v3/detail/variant.hpp:26,
                 from /home/mi/h4nn3s/devel/range-v3/include/range/v3/iterator/common_iterator.hpp:24,
                 from /home/mi/h4nn3s/devel/range-v3/include/range/v3/view/interface.hpp:24,
                 from /home/mi/h4nn3s/devel/range-v3/include/range/v3/view/facade.hpp:20,
                 from /home/mi/h4nn3s/devel/range-v3/include/range/v3/core.hpp:22,
                 from /home/mi/h4nn3s/devel/range-v3/test/view/concat.cpp:14:
/home/mi/h4nn3s/devel/range-v3/include/range/v3/functional/compose.hpp: In instantiation of 'struct ranges::composed<ranges::composed<ranges::convert_to<std::__cxx11::basic_string<char>&>, ranges::detail::dereference_fn>, ranges::detail::get_datum_fn>':
/home/mi/h4nn3s/devel/range-v3/include/range/v3/functional/invoke.hpp:118:14:   required by substitution of 'template<class F, class ... Args> constexpr decltype (static_cast<F&&>(f)(static_cast<Args&>(ranges::invoke_fn::operator()::args) ...)) ranges::invoke_fn::operator()(F&&, Args&& ...) const [with F = ranges::composed<ranges::composed<ranges::convert_to<std::__cxx11::basic_string<char>&>, ranges::detail::dereference_fn>, ranges::detail::get_datum_fn>&; Args = {ranges::indexed_element<const __gnu_cxx::__normal_iterator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >*, std::vector<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > > >, 0>}]'
/home/mi/h4nn3s/devel/range-v3/include/meta/meta.hpp:141:32:   recursively required by substitution of 'template<class Fun, class ... Ts, long unsigned int ...Is> struct ranges::detail::variant_visit_results<Fun, meta::list<Tail ...>, std::integer_sequence<long unsigned int, Values ...>, meta::void_<ranges::invoke_result_t<Fun&, ranges::indexed_element<Ts, Is> >...> > [with Fun = ranges::composed<ranges::composed<ranges::convert_to<std::__cxx11::basic_string<char>&>, ranges::detail::dereference_fn>, ranges::detail::get_datum_fn>; Ts = {const __gnu_cxx::__normal_iterator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >*, std::vector<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > > >, const __gnu_cxx::__normal_iterator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >*, std::vector<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > > >}; long unsigned int ...Is = {0, 1}]'
/home/mi/h4nn3s/devel/range-v3/include/meta/meta.hpp:141:32:   required by substitution of 'template<class T>  requires  Trait<T> using _t = typename T::type [with T = ranges::detail::variant_visit_results<ranges::composed<ranges::composed<ranges::convert_to<std::__cxx11::basic_string<char>&>, ranges::detail::dereference_fn>, ranges::detail::get_datum_fn>, meta::list<const __gnu_cxx::__normal_iterator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >*, std::vector<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > > >, const __gnu_cxx::__normal_iterator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >*, std::vector<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > > > >, std::integer_sequence<long unsigned int, 0, 1>, void>]'
/home/mi/h4nn3s/devel/range-v3/include/range/v3/detail/variant.hpp:576:83:   required by substitution of 'template<class Fun, class ... Ts> using variant_visit_results_t = meta::_t<ranges::detail::variant_visit_results<Fun, meta::list<Tail ...>, typename meta::detail::make_indices_<sizeof... (Ts), std::integer_sequence<long unsigned int, 0>, meta::detail::strategy_(1, sizeof... (Ts))>::type> > [with Fun = ranges::composed<ranges::composed<ranges::convert_to<std::__cxx11::basic_string<char>&>, ranges::detail::dereference_fn>, ranges::detail::get_datum_fn>; Ts = {ranges::variant<__gnu_cxx::__normal_iterator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >*, std::vector<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > > >, __gnu_cxx::__normal_iterator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >*, std::vector<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > > > >::add_const_t<__gnu_cxx::__normal_iterator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >*, std::vector<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > > > >, ranges::variant<__gnu_cxx::__normal_iterator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >*, std::vector<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > > >, __gnu_cxx::__normal_iterator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >*, std::vector<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > > > >::add_const_t<__gnu_cxx::__normal_iterator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >*, std::vector<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > > > >}]'
/home/mi/h4nn3s/devel/range-v3/include/range/v3/detail/variant.hpp:741:9:   required by substitution of 'template<class Fun> ranges::detail::variant_visit_results_t<ranges::composed<Fun, ranges::detail::get_datum_fn>, const __gnu_cxx::__normal_iterator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >*, std::vector<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > > >, const __gnu_cxx::__normal_iterator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >*, std::vector<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > > > > ranges::variant<__gnu_cxx::__normal_iterator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >*, std::vector<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > > >, __gnu_cxx::__normal_iterator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >*, std::vector<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > > > >::visit<Fun>(Fun) const [with Fun = ranges::composed<ranges::convert_to<std::__cxx11::basic_string<char>&>, ranges::detail::dereference_fn>]'
/home/mi/h4nn3s/devel/range-v3/include/range/v3/view/concat.hpp:268:53:   required from 'ranges::concat_view<Rngs>::cursor<IsConst>::reference ranges::concat_view<Rngs>::cursor<IsConst>::read() const [with bool IsConst = true; Rngs = {ranges::ref_view<std::vector<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > > >, ranges::ref_view<std::vector<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > > >}; ranges::concat_view<Rngs>::cursor<IsConst>::reference = std::__cxx11::basic_string<char>&]'
/home/mi/h4nn3s/devel/range-v3/include/range/v3/detail/range_access.hpp:98:41:   required from 'static constexpr decltype (pos.read()) ranges::range_access::read(const Cur&) [with Cur = ranges::concat_view<ranges::ref_view<std::vector<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > > >, ranges::ref_view<std::vector<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > > > >::cursor<true>; decltype (pos.read()) = std::__cxx11::basic_string<char>&]'
/home/mi/h4nn3s/devel/range-v3/include/range/v3/iterator/basic_iterator.hpp:576:45:   required from 'constexpr typename ranges::basic_iterator<Cur>::assoc_types_::const_reference_t ranges::basic_iterator<Cur>::operator*() const requires  ReadableCursor<Cur> and !(ranges::detail::is_writable_cursor<Cur>::value) [with Cur = ranges::concat_view<ranges::ref_view<std::vector<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > > >, ranges::ref_view<std::vector<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > > > >::cursor<true>; typename ranges::basic_iterator<Cur>::assoc_types_::const_reference_t = std::__cxx11::basic_string<char>&]'
/home/mi/h4nn3s/devel/range-v3/include/range/v3/range/access.hpp:52:9:   required by substitution of 'template<class Rng> using range_reference_t = ranges::iter_reference_t<decltype (ranges::{anonymous}::begin(declval<Rng&>()))> [with Rng = ranges::concat_view<ranges::ref_view<std::vector<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > > >, ranges::ref_view<std::vector<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > > > >]'
/home/mi/h4nn3s/devel/range-v3/test/view/concat.cpp:33:66:   required from here
/home/mi/h4nn3s/devel/range-v3/include/range/v3/functional/compose.hpp:26:12: internal compiler error: Segmentation fault
   26 |     struct composed
      |            ^~~~~~~~
Please submit a full bug report,
with preprocessed source if appropriate.
See <https://gcc.gnu.org/bugs/> for instructions.
gmake[2]: *** [test/view/CMakeFiles/view.concat.dir/build.make:63: test/view/CMakeFiles/view.concat.dir/concat.cpp.o] Fehler 1
gmake[2]: Das Ziel „test/view/CMakeFiles/view.concat.dir/build“ wurde wegen Fehlern nicht aktualisiert.
gmake[1]: *** [CMakeFiles/Makefile2:17594: test/view/CMakeFiles/view.concat.dir/all] Fehler 2
  1. view take_while triggers:
In file included from /home/mi/h4nn3s/devel/range-v3/include/range/v3/view/take_while.hpp:25,
                 from /home/mi/h4nn3s/devel/range-v3/test/view/take_while.cpp:16:
/home/mi/h4nn3s/devel/range-v3/include/range/v3/functional/indirect.hpp: In instantiation of 'struct ranges::indirected<ranges::composed<main()::<lambda(int)>, int my_data::*> >':
/usr/local/lib/gcc9/include/c++/type_traits:925:12:   required from 'struct std::is_constructible<ranges::indirected<ranges::composed<main()::<lambda(int)>, int my_data::*> >, ranges::indirected<ranges::composed<main()::<lambda(int)>, int my_data::*> > >'
/home/mi/h4nn3s/devel/range-v3/include/concepts/concepts.hpp:1013:9:   required by substitution of 'template<class T> using semiregular_t = meta::if_c<(bool)(Semiregular<T>), T, ranges::semiregular<T> > [with T = ranges::indirected<ranges::composed<main()::<lambda(int)>, int my_data::*> >]'
/home/mi/h4nn3s/devel/range-v3/include/range/v3/view/take_while.hpp:45:29:   required from 'struct ranges::iter_take_while_view<ranges::generate_view<main()::<lambda()> >, ranges::indirected<ranges::composed<main()::<lambda(int)>, int my_data::*> > >'
/home/mi/h4nn3s/devel/range-v3/include/range/v3/view/take_while.hpp:89:12:   required from 'struct ranges::take_while_view<ranges::generate_view<main()::<lambda()> >, ranges::composed<main()::<lambda(int)>, int my_data::*> >'
/home/mi/h4nn3s/devel/range-v3/include/range/v3/functional/invoke.hpp:118:14:   required from 'constexpr decltype (static_cast<F&&>(f)(static_cast<Args&>(ranges::invoke_fn::operator()::args) ...)) ranges::invoke_fn::operator()(F&&, Args&& ...) const [with F = ranges::detail::pipeable_binder<std::_Bind<ranges::view::take_while_fn(std::_Placeholder<1>, main()::<lambda(int)>, int my_data::*)> >&; Args = {ranges::generate_view<main()::<lambda()> >&}; decltype (static_cast<F&&>(f)(static_cast<Args&>(ranges::invoke_fn::operator()::args) ...)) = ranges::take_while_view<ranges::generate_view<main()::<lambda()> >, ranges::composed<main()::<lambda(int)>, int my_data::*> >]'
/home/mi/h4nn3s/devel/range-v3/include/range/v3/functional/concepts.hpp:24:5:   required by substitution of 'template<class Arg, class Pipe> decltype (ranges::pipeable_access::impl<Pipe>::pipe(declval<Arg>(), declval<Pipe&>())) ranges::operator|(Arg&&, Pipe) requires !(is_pipeable_v<Arg>) and is_pipeable_v<Pipe> [with Arg = ranges::generate_view<main()::<lambda()> >&; Pipe = ranges::view::view<ranges::detail::pipeable_binder<std::_Bind<ranges::view::take_while_fn(std::_Placeholder<1>, main()::<lambda(int)>, int my_data::*)> > >]'
/home/mi/h4nn3s/devel/range-v3/test/view/take_while.cpp:84:53:   required from here
/home/mi/h4nn3s/devel/range-v3/include/range/v3/functional/indirect.hpp:27:12: internal compiler error: Segmentation fault
   27 |     struct indirected
      |            ^~~~~~~~~~
Please submit a full bug report,
with preprocessed source if appropriate.
See <https://gcc.gnu.org/bugs/> for instructions.
gmake[2]: *** [test/view/CMakeFiles/view.take_while.dir/build.make:63: test/view/CMakeFiles/view.take_while.dir/take_while.cpp.o] Fehler 1
gmake[2]: Das Ziel „test/view/CMakeFiles/view.take_while.dir/build“ wurde wegen Fehlern nicht aktualisiert.
gmake[1]: *** [CMakeFiles/Makefile2:18038: test/view/CMakeFiles/view.take_while.dir/all] Fehler 2
@h-2
Copy link
Contributor Author

h-2 commented Jan 28, 2019

The GCC bug tracker for reference: https://gcc.gnu.org/bugzilla/show_bug.cgi?id=89089

@ericniebler
Copy link
Owner

Looks like buggy support for [[no_unique_address]]. I'll let this one sit in the hopes that they fix it for RTM.

@h-2
Copy link
Contributor Author

h-2 commented Jan 29, 2019

Resolved in GCC.

To workaround the issue in a hackish way in GCC9-installs prior to the fix, simply build with
-Dno_unique_address=maybe_unused

@ericniebler
Copy link
Owner

Thanks for following up. I generally don't bother working around bugs in pre-release compilers.

@h-2
Copy link
Contributor Author

h-2 commented Jan 29, 2019

Thanks for following up. I generally don't bother working around bugs in pre-release compilers.

Yep that was just for anyone else needing a workaround. We also don't support unreleased compiler versions, but I do try to get bugs reported on time to give them a chance to fix it for the release.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants