@@ -39,6 +39,8 @@ int opdi::ParallelOmpLogic::skipParallelRegion = 0;
3939
4040void opdi::ParallelOmpLogic::reverseFunc (void * parallelDataPtr) {
4141
42+ assert (tool != nullptr );
43+
4244 ParallelData* parallelData = static_cast <ParallelData*>(parallelDataPtr);
4345
4446 #if OPDI_OMP_LOGIC_INSTRUMENT
@@ -105,6 +107,8 @@ void opdi::ParallelOmpLogic::reverseFunc(void* parallelDataPtr) {
105107
106108void opdi::ParallelOmpLogic::deleteFunc (void * parallelDataPtr) {
107109
110+ assert (tool != nullptr );
111+
108112 ParallelData* parallelData = static_cast <ParallelData*>(parallelDataPtr);
109113
110114 ParallelOmpLogic::internalBeginSkippedParallelRegion ();
@@ -153,23 +157,25 @@ void opdi::ParallelOmpLogic::internalSetAdjointAccessMode(ImplicitTaskData* impl
153157 implicitTaskData->adjointAccessModes .back () = mode;
154158 }
155159 else {
156- void * position = tool->allocPosition ();
157- tool->getTapePosition (implicitTaskData->newTape , position);
160+ if (tool != nullptr ) {
161+ void * position = tool->allocPosition ();
162+ tool->getTapePosition (implicitTaskData->newTape , position);
158163
159- if (tool->comparePosition (implicitTaskData->positions .back (), position) == 0 ) {
160- implicitTaskData->adjointAccessModes .back () = mode;
161- tool->freePosition (position);
162- }
163- else {
164- implicitTaskData->adjointAccessModes .push_back (mode);
165- implicitTaskData->positions .push_back (position);
164+ if (tool->comparePosition (implicitTaskData->positions .back (), position) == 0 ) {
165+ implicitTaskData->adjointAccessModes .back () = mode;
166+ tool->freePosition (position);
167+ }
168+ else {
169+ implicitTaskData->adjointAccessModes .push_back (mode);
170+ implicitTaskData->positions .push_back (position);
171+ }
166172 }
167173 }
168174}
169175
170176void * opdi::ParallelOmpLogic::onParallelBegin (void * encounteringTaskDataPtr, int maximumSizeOfTeam) {
171177
172- if (tool->getThreadLocalTape () != nullptr && ParallelOmpLogic::skipParallelRegion == 0 ) {
178+ if (tool != nullptr && tool ->getThreadLocalTape () != nullptr && ParallelOmpLogic::skipParallelRegion == 0 ) {
173179
174180 ImplicitTaskData* encounteringTaskData = static_cast <ImplicitTaskData*>(encounteringTaskDataPtr);
175181
@@ -209,6 +215,8 @@ void opdi::ParallelOmpLogic::onParallelEnd(void* parallelDataPtr) {
209215
210216 if (parallelDataPtr != nullptr ) {
211217
218+ assert (tool != nullptr );
219+
212220 ParallelData* parallelData = static_cast <ParallelData*>(parallelDataPtr);
213221
214222 #if OPDI_OMP_LOGIC_INSTRUMENT
@@ -251,6 +259,8 @@ void opdi::ParallelOmpLogic::onParallelEnd(void* parallelDataPtr) {
251259
252260void opdi::ParallelOmpLogic::setAdjointAccessMode (opdi::LogicInterface::AdjointAccessMode mode) {
253261
262+ assert (backend != nullptr );
263+
254264 #if OPDI_VARIABLE_ADJOINT_ACCESS_MODE
255265 void * implicitTaskDataPtr = backend->getImplicitTaskData ();
256266 if (implicitTaskDataPtr != nullptr ) { // nullptr if called during tape evaluation
@@ -266,6 +276,9 @@ void opdi::ParallelOmpLogic::setAdjointAccessMode(opdi::LogicInterface::AdjointA
266276}
267277
268278opdi::LogicInterface::AdjointAccessMode opdi::ParallelOmpLogic::getAdjointAccessMode () const {
279+
280+ assert (backend != nullptr );
281+
269282 void * implicitTaskDataPtr = backend->getImplicitTaskData ();
270283 if (implicitTaskDataPtr != nullptr ) { // nullptr if called during tape evaluation
271284 return internalGetAdjointAccessMode (static_cast <ImplicitTaskData*>(implicitTaskDataPtr));
0 commit comments