================ @@ -137,21 +137,21 @@ int32_t ByteCodeEmitter::getOffset(LabelTy Label) { template <typename T> static void emit(Program &P, std::vector<std::byte> &Code, const T &Val, bool &Success) { + size_t ValPos = Code.size(); size_t Size; if constexpr (std::is_pointer_v<T>) - Size = sizeof(uint32_t); + Size = align(sizeof(uint32_t)); else - Size = sizeof(T); + Size = align(sizeof(T)); - if (Code.size() + Size > std::numeric_limits<unsigned>::max()) { + if (ValPos + Size > std::numeric_limits<unsigned>::max()) { ---------------- shafik wrote:
`Code.size() + Size` could overflow. If we have assertions on `Code.size()` and `Size` then we can say hey we know that are always smaller than or equal unsigned max and so overflow is not possible. The code just looks suspicious because it looks like a classic (wrong) overflow check and so that got me asking questions. https://github.com/llvm/llvm-project/pull/151824 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits