Make sure pointer arithmetic is correct

release/4.3a0
Frank Dellaert 2023-02-11 12:38:11 -08:00
parent ae1526dd8a
commit 04e155c9d4
1 changed files with 5 additions and 5 deletions

View File

@ -717,14 +717,14 @@ class BinarySumNode : public ExpressionNode<T> {
}; };
/// Construct an execution trace for reverse AD /// Construct an execution trace for reverse AD
T traceExecution(const Values& values, ExecutionTrace<T>& trace, T traceExecution(const Values &values, ExecutionTrace<T> &trace,
ExecutionTraceStorage* ptr) const override { ExecutionTraceStorage *ptr) const override {
assert(reinterpret_cast<size_t>(ptr) % TraceAlignment == 0); assert(reinterpret_cast<size_t>(ptr) % TraceAlignment == 0);
Record* record = new (ptr) Record(); Record *record = new (ptr) Record();
trace.setFunction(record); trace.setFunction(record);
ExecutionTraceStorage* ptr1 = ptr + upAligned(sizeof(Record)); auto ptr1 = reinterpret_cast<ExecutionTraceStorage *>(reinterpret_cast<char *>(ptr) + upAligned(sizeof(Record)));
ExecutionTraceStorage* ptr2 = ptr1 + expression1_->traceSize(); auto ptr2 = reinterpret_cast<ExecutionTraceStorage *>(reinterpret_cast<char *>(ptr1) + expression1_->traceSize());
return expression1_->traceExecution(values, record->trace1, ptr1) + return expression1_->traceExecution(values, record->trace1, ptr1) +
expression2_->traceExecution(values, record->trace2, ptr2); expression2_->traceExecution(values, record->trace2, ptr2);
} }