================
@@ -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
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits