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]);
             ^
...

Reply via email to