# UNDF: UNDF-2026-000000294 --- a/spirv_cross.cpp +++ b/spirv_cross.cpp @@ -2605,14 +2605,12 @@ void Compiler::add_implied_read_expression(SPIRExpression &e, uint32_t source) { - auto itr = find(begin(e.implied_read_expressions), end(e.implied_read_expressions), ID(source)); - if (itr == end(e.implied_read_expressions)) - e.implied_read_expressions.push_back(source); + // O(1) insert — set semantics handle deduplication automatically. + e.implied_read_expressions.insert(source); } void Compiler::add_implied_read_expression(SPIRAccessChain &e, uint32_t source) { - auto itr = find(begin(e.implied_read_expressions), end(e.implied_read_expressions), ID(source)); - if (itr == end(e.implied_read_expressions)) - e.implied_read_expressions.push_back(source); + e.implied_read_expressions.insert(source); } --- a/spirv_cross_parsed_ir.hpp +++ b/spirv_cross_parsed_ir.hpp @@ -1,6 +1,7 @@ // (excerpt — only changed fields shown) struct SPIRExpression : IVariant { - SmallVector implied_read_expressions; + std::unordered_set implied_read_expressions; ... }; struct SPIRAccessChain : IVariant { - SmallVector implied_read_expressions; + std::unordered_set implied_read_expressions; ... };