[SPIR-V] Fix dangling pointer to previous field in 'LowerTypeVisitor::populateLayoutInformation()' (#4913)

This commit is contained in:
Laura Hermanns 2023-01-06 05:37:06 -05:00 коммит произвёл GitHub
Родитель ac3a6ae9f4
Коммит b0a96c2a47
Не найден ключ, соответствующий данной подписи
Идентификатор ключа GPG: 4AEE18F83AFDEB23
1 изменённых файлов: 8 добавлений и 8 удалений

Просмотреть файл

@ -1043,16 +1043,16 @@ LowerTypeVisitor::populateLayoutInformation(
// This stores the index of the field in the actual SPIR-V construct.
// When bitfields are merged, this index will be the same for merged fields.
uint32_t fieldIndexInConstruct = 0;
for (size_t i = 0; i < sortedFields.size(); i++) {
const StructType::FieldInfo *previousField =
i > 0 ? &loweredFields.back() : nullptr;
const HybridStructType::FieldInfo *currentField = sortedFields[i];
for (size_t i = 0, iPrevious = -1; i < sortedFields.size(); iPrevious = i++) {
const size_t fieldIndexForMap = loweredFields.size();
loweredFields.emplace_back(
fieldVisitor(previousField, currentField, fieldIndexInConstruct));
if (!previousField ||
previousField->fieldIndex != loweredFields.back().fieldIndex) {
loweredFields.emplace_back(fieldVisitor(
(iPrevious < loweredFields.size() ? &loweredFields[iPrevious]
: nullptr),
sortedFields[i], fieldIndexInConstruct));
if (!(iPrevious < loweredFields.size()) ||
loweredFields[iPrevious].fieldIndex !=
loweredFields.back().fieldIndex) {
fieldIndexInConstruct++;
}
fieldToIndexMap[sortedFields[i]] = fieldIndexForMap;