Make sure pointer arithmetic is correct
parent
ae1526dd8a
commit
04e155c9d4
|
@ -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);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue