Work around `std::reverse` miscompilation with empty range

This causes problems when compiling with fuzzing instrumenation enabled.
This commit is contained in:
Robert O'Callahan 2026-01-28 18:16:24 +00:00
parent af3bb9751f
commit ae569486a0
1 changed files with 4 additions and 2 deletions

View File

@ -286,6 +286,7 @@ struct RTLILFrontendWorker {
if (width > MAX_CONST_WIDTH) if (width > MAX_CONST_WIDTH)
error("Constant width %lld out of range before `%s`.", width, error_token()); error("Constant width %lld out of range before `%s`.", width, error_token());
bits.reserve(width); bits.reserve(width);
int start_idx = idx;
while (true) { while (true) {
RTLIL::State bit; RTLIL::State bit;
switch (line[idx]) { switch (line[idx]) {
@ -300,8 +301,9 @@ struct RTLILFrontendWorker {
bits.push_back(bit); bits.push_back(bit);
++idx; ++idx;
} }
done: done:
std::reverse(bits.begin(), bits.end()); if (start_idx < idx)
std::reverse(bits.begin(), bits.end());
if (GetSize(bits) > width) if (GetSize(bits) > width)
bits.resize(width); bits.resize(width);