[Bug c++/67762] New: [C++1z] 'not a constant expression" errors only with -fsanitize=undefined
trippels at gcc dot gnu.org
gcc-bugzilla@gcc.gnu.org
Tue Sep 29 12:28:00 GMT 2015
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]);
^
...
More information about the Gcc-bugs
mailing list