@@ -137,21 +137,21 @@ int32_t ByteCodeEmitter::getOffset(LabelTy Label) {
137
137
template <typename T>
138
138
static void emit (Program &P, std::vector<std::byte> &Code, const T &Val,
139
139
bool &Success) {
140
+ size_t ValPos = Code.size ();
140
141
size_t Size;
141
142
142
143
if constexpr (std::is_pointer_v<T>)
143
- Size = sizeof (uint32_t );
144
+ Size = align ( sizeof (uint32_t ) );
144
145
else
145
- Size = sizeof (T);
146
+ Size = align ( sizeof (T) );
146
147
147
- if (Code. size () + Size > std::numeric_limits<unsigned >::max ()) {
148
+ if (ValPos + Size > std::numeric_limits<unsigned >::max ()) {
148
149
Success = false ;
149
150
return ;
150
151
}
151
152
152
153
// Access must be aligned!
153
- size_t ValPos = align (Code.size ());
154
- Size = align (Size);
154
+ assert (aligned (ValPos));
155
155
assert (aligned (ValPos + Size));
156
156
Code.resize (ValPos + Size);
157
157
@@ -168,17 +168,16 @@ static void emit(Program &P, std::vector<std::byte> &Code, const T &Val,
168
168
template <typename T>
169
169
static void emitSerialized (std::vector<std::byte> &Code, const T &Val,
170
170
bool &Success) {
171
- size_t Size = Val.bytesToSerialize ();
171
+ size_t ValPos = Code.size ();
172
+ size_t Size = align (Val.bytesToSerialize ());
172
173
173
- if (Code. size () + Size > std::numeric_limits<unsigned >::max ()) {
174
+ if (ValPos + Size > std::numeric_limits<unsigned >::max ()) {
174
175
Success = false ;
175
176
return ;
176
177
}
177
178
178
179
// Access must be aligned!
179
- assert (aligned (Code.size ()));
180
- size_t ValPos = Code.size ();
181
- Size = align (Size);
180
+ assert (aligned (ValPos));
182
181
assert (aligned (ValPos + Size));
183
182
Code.resize (ValPos + Size);
184
183
0 commit comments