Skip to content

Commit 9654999

Browse files
authored
Fix #935: avoid the need to deallocate an object (#937)
The compiler is generating false positives. The solution (which is actually the work of @sergeisakov, via offline communications) involves slightly refactoring the code in a way that avoids creating a temporary vector.
1 parent 3af5e18 commit 9654999

File tree

1 file changed

+20
-8
lines changed

1 file changed

+20
-8
lines changed

lib/gate_appl.h

Lines changed: 20 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -118,10 +118,16 @@ template <typename Simulator, typename Gate, typename Rgen>
118118
inline bool ApplyGate(const typename Simulator::StateSpace& state_space,
119119
const Simulator& simulator, const Gate& gate, Rgen& rgen,
120120
typename Simulator::State& state) {
121-
using MeasurementResult = typename Simulator::StateSpace::MeasurementResult;
122-
std::vector<MeasurementResult> discarded_results;
123-
return
124-
ApplyGate(state_space, simulator, gate, rgen, state, discarded_results);
121+
if (gate.kind == gate::kMeasurement) {
122+
auto measure_result = state_space.Measure(gate.qubits, rgen, state);
123+
if (!measure_result.valid) {
124+
return false;
125+
}
126+
} else {
127+
ApplyGate(state_space, simulator, gate);
128+
}
129+
130+
return true;
125131
}
126132

127133
/**
@@ -220,10 +226,16 @@ template <typename Simulator, typename Gate, typename Rgen>
220226
inline bool ApplyFusedGate(const typename Simulator::StateSpace& state_space,
221227
const Simulator& simulator, const Gate& gate,
222228
Rgen& rgen, typename Simulator::State& state) {
223-
using MeasurementResult = typename Simulator::StateSpace::MeasurementResult;
224-
std::vector<MeasurementResult> discarded_results;
225-
return ApplyFusedGate(
226-
state_space, simulator, gate, rgen, state, discarded_results);
229+
if (gate.kind == gate::kMeasurement) {
230+
auto measure_result = state_space.Measure(gate.qubits, rgen, state);
231+
if (!measure_result.valid) {
232+
return false;
233+
}
234+
} else {
235+
ApplyFusedGate(simulator, gate, state);
236+
}
237+
238+
return true;
227239
}
228240

229241
} // namespace qsim

0 commit comments

Comments
 (0)