https://gcc.gnu.org/bugzilla/show_bug.cgi?id=67762
Bug ID: 67762 Summary: [C++1z] 'not a constant expression" errors only with -fsanitize=undefined Product: gcc Version: 6.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: c++ Assignee: unassigned at gcc dot gnu.org Reporter: trippels at gcc dot gnu.org CC: mpolacek at gcc dot gnu.org Target Milestone: --- Created attachment 36415 --> https://gcc.gnu.org/bugzilla/attachment.cgi?id=36415&action=edit unreduced testcase The attached testcase compiles fine without -fsanitize=undefined. markus@x4 test % g++ -c -std=c++1z -Wall -Wextra variant.ii markus@x4 test % g++ -c -fsanitize=undefined -std=c++1z -Wall -Wextra variant.ii /var/tmp/cmcstl2/test/variant.cpp: In function ‘void {anonymous}::test_visit()’: /var/tmp/cmcstl2/test/variant.cpp:886:5: error: non-constant condition for static assertion static_assert(visit(f, V{42}, V{42}) == 84ull); ^ In file included from /var/tmp/cmcstl2/include/stl2/variant.hpp:30:0, from /var/tmp/cmcstl2/test/variant.cpp:16: /var/tmp/cmcstl2/test/variant.cpp:886:24: in constexpr expansion of ‘std::experimental::ranges_v1::__variant::visit<std::plus<void>&, {std::experimental::ranges_v1::variant <int, unsigned int, long int, long unsigned int, long long int, long long unsigned int>, std::experimental::ranges_v1::variant<int, unsigned int, long int, long unsigned int, long long int, long long unsigned int>}>(f, std::experimental::ranges_v1::variant<int, unsigned int, long int, long unsigned int, long long int, long long unsigned int>(42), std::experimental::ranges_v1::variant<int, unsigned int, long int, long unsigned int, long long int, long long unsigned int>(42))’ /var/tmp/cmcstl2/include/stl2/detail/variant/visit.hpp:414:32: in constexpr expansion of ‘std::experimental::ranges_v1::__variant::visit_with_indices<std::experimental::ran ges_v1::__variant::no_index_visitor<std::plus<void>&>, {std::experimental::ranges_v1::variant<int, unsigned int, long int, long unsigned int, long long int, long long unsigne d int>, std::experimental::ranges_v1::variant<int, unsigned int, long int, long unsigned int, long long int, long long unsigned int>}>((*(UBSAN_NULL((& std::experimental::ran ges_v1::__variant::no_index_visitor<std::plus<void>&>{(*(UBSAN_NULL((& std::forward<std::plus<void>&>((*(UBSAN_NULL((& f), 2u, 0u), (& f))))), 2u, 0u), (& std::forward<std::p lus<void>&>((*(UBSAN_NULL((& f), 2u, 0u), (& f)))))))}), 2u, 8u), (& std::experimental::ranges_v1::__variant::no_index_visitor<std::plus<void>&>{(*(UBSAN_NULL((& std::forward <std::plus<void>&>((*(UBSAN_NULL((& f), 2u, 0u), (& f))))), 2u, 0u), (& std::forward<std::plus<void>&>((*(UBSAN_NULL((& f), 2u, 0u), (& f)))))))}))), (*(UBSAN_NULL((& std::fo rward<std::experimental::ranges_v1::variant<int, unsigned int, long int, long unsigned int, long long int, long long unsigned int> >((*(UBSAN_NULL((& vs#0), 2u, 8u), (& vs#0) )))), 2u, 8u), (& std::forward<std::experimental::ranges_v1::variant<int, unsigned int, long int, long unsigned int, long long int, long long unsigned int> >((*(UBSAN_NULL((& vs#0), 2u, 8u), (& vs#0))))))), (*(UBSAN_NULL((& std::forward<std::experimental::ranges_v1::variant<int, unsigned int, long int, long unsigned int, long long int, long long unsigned int> >((*(UBSAN_NULL((& vs#1), 2u, 8u), (& vs#1))))), 2u, 8u), (& std::forward<std::experimental::ranges_v1::variant<int, unsigned int, long int, long unsigned int, long long int, long long unsigned int> >((*(UBSAN_NULL((& vs#1), 2u, 8u), (& vs#1))))))))’ /var/tmp/cmcstl2/include/stl2/detail/variant/visit.hpp:388:36: in constexpr expansion of ‘std::experimental::ranges_v1::__variant::raw_visit_with_indices<std::experimental: :ranges_v1::__variant::cooked_visitor<std::experimental::ranges_v1::__variant::no_index_visitor<std::plus<void>&>, std::experimental::ranges_v1::variant<int, unsigned int, lo ng int, long unsigned int, long long int, long long unsigned int>, std::experimental::ranges_v1::variant<int, unsigned int, long int, long unsigned int, long long int, long l ong unsigned int> >, {std::experimental::ranges_v1::variant<int, unsigned int, long int, long unsigned int, long long int, long long unsigned int>, std::experimental::ranges_ v1::variant<int, unsigned int, long int, long unsigned int, long long int, long long unsigned int>}>((*(UBSAN_NULL((& std::experimental::ranges_v1::__variant::cooked_visitor< std::experimental::ranges_v1::__variant::no_index_visitor<std::plus<void>&>, std::experimental::ranges_v1::variant<int, unsigned int, long int, long unsigned int, long long i nt, long long unsigned int>, std::experimental::ranges_v1::variant<int, unsigned int, long int, long unsigned int, long long int, long long unsigned int> >{(*(UBSAN_NULL((& s td::forward<std::experimental::ranges_v1::__variant::no_index_visitor<std::plus<void>&> >((*(UBSAN_NULL((& f), 2u, 8u), (& f))))), 2u, 8u), (& std::forward<std::experimental: :ranges_v1::__variant::no_index_visitor<std::plus<void>&> >((*(UBSAN_NULL((& f), 2u, 8u), (& f)))))))}), 2u, 8u), (& std::experimental::ranges_v1::__variant::cooked_visitor<s td::experimental::ranges_v1::__variant::no_index_visitor<std::plus<void>&>, std::experimental::ranges_v1::variant<int, unsigned int, long int, long unsigned int, long long in t, long long unsigned int>, std::experimental::ranges_v1::variant<int, unsigned int, long int, long unsigned int, long long int, long long unsigned int> >{(*(UBSAN_NULL((& st d::forward<std::experimental::ranges_v1::__variant::no_index_visitor<std::plus<void>&> >((*(UBSAN_NULL((& f), 2u, 8u), (& f))))), 2u, 8u), (& std::forward<std::experimental:: ranges_v1::__variant::no_index_visitor<std::plus<void>&> >((*(UBSAN_NULL((& f), 2u, 8u), (& f)))))))}))), (*(UBSAN_NULL((& std::forward<std::experimental::ranges_v1::variant< int, unsigned int, long int, long unsigned int, long long int, long long unsigned int> >((*(UBSAN_NULL((& vs#0), 2u, 8u), (& vs#0))))), 2u, 8u), (& std::forward<std::experime ntal::ranges_v1::variant<int, unsigned int, long int, long unsigned int, long long int, long long unsigned int> >((*(UBSAN_NULL((& vs#0), 2u, 8u), (& vs#0))))))), (*(UBSAN_NU LL((& std::forward<std::experimental::ranges_v1::variant<int, unsigned int, long int, long unsigned int, long long int, long long unsigned int> >((*(UBSAN_NULL((& vs#1), 2u, 8u), (& vs#1))))), 2u, 8u), (& std::forward<std::experimental::ranges_v1::variant<int, unsigned int, long int, long unsigned int, long long int, long long unsigned int> >((*( UBSAN_NULL((& vs#1), 2u, 8u), (& vs#1))))))))’ /var/tmp/cmcstl2/include/stl2/detail/variant/visit.hpp:300:13: error: ‘(std::experimental::ranges_v1::__variant::o1_visit_handler<std::integer_sequence<long unsigned int, 0ul , 0ul>, std::experimental::ranges_v1::__variant::cooked_visitor<std::experimental::ranges_v1::__variant::no_index_visitor<std::plus<void>&>, std::experimental::ranges_v1::var iant<int, unsigned int, long int, long unsigned int, long long int, long long unsigned int>, std::experimental::ranges_v1::variant<int, unsigned int, long int, long unsigned int, long long int, long long unsigned int> >, {std::experimental::ranges_v1::variant<int, unsigned int, long int, long unsigned int, long long int, long long unsigned int>, std::experimental::ranges_v1::variant<int, unsigned int, long int, long unsigned int, long long int, long long unsigned int>}> == 0u)’ is not a constant expression STL2_CONSTEXPR_ASSUME(Dispatch::table[i]); ^ ...