https://gcc.gnu.org/bugzilla/show_bug.cgi?id=83231
Bug ID: 83231
Summary: ICE on constexpr evaluation
Product: gcc
Version: 8.0
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: c++
Assignee: unassigned at gcc dot gnu.org
Reporter: antoshkka at gmail dot com
Target Milestone: ---
Following valid example
struct GUID {
unsigned long Data1;
unsigned char Data2[ 4 ];
};
constexpr bool is_equal(GUID lhs, GUID rhs) {
return lhs.Data1 == rhs.Data1
&& lhs.Data2[0] == rhs.Data2[0] && lhs.Data2[1] == rhs.Data2[1];
}
void guid_tests() {
constexpr GUID some_guid =
{ 0x3bcac5a9, { 0xb5, 0xc5, 0xb1, 0x9b } };
constexpr bool val = is_equal(some_guid, some_guid);
}
fails to cimpile and produces error message:
<source>: In function 'void guid_tests()':
14 : <source>:14:34: in 'constexpr' expansion of 'is_equal(some_guid,
some_guid)'
14 : <source>:14:55: internal compiler error: in cxx_eval_bit_field_ref, at
cp/constexpr.c:2608
constexpr bool val = is_equal(some_guid, some_guid);
^
mmap: Cannot allocate memory
Please submit a full bug report,
with preprocessed source if appropriate.
See <https://gcc.gnu.org/bugs/> for instructions.
Compiler exited with result code 1
Build flags: --std=c++14 -O2