mirror of https://github.com/YosysHQ/yosys.git
Fix use-after-free in LUT opt pass
RTLIL::Module::remove(Cell* cell) calls `delete cell`. Any subsequent accesses of `cell` then causes undefined behavior.
This commit is contained in:
parent
3e67ab1ebb
commit
9396678db4
|
@ -277,12 +277,13 @@ struct OptLutWorker
|
|||
module->connect(lut_output, value);
|
||||
sigmap.add(lut_output, value);
|
||||
|
||||
module->remove(lut);
|
||||
luts.erase(lut);
|
||||
luts_arity.erase(lut);
|
||||
luts_dlogics.erase(lut);
|
||||
luts_dlogic_inputs.erase(lut);
|
||||
|
||||
module->remove(lut);
|
||||
|
||||
eliminated_count++;
|
||||
if (limit > 0)
|
||||
limit--;
|
||||
|
@ -493,11 +494,12 @@ struct OptLutWorker
|
|||
luts_arity[lutM] = lutM_arity;
|
||||
luts.erase(lutR);
|
||||
luts_arity.erase(lutR);
|
||||
lutR->module->remove(lutR);
|
||||
|
||||
worklist.insert(lutM);
|
||||
worklist.erase(lutR);
|
||||
|
||||
lutR->module->remove(lutR);
|
||||
|
||||
combined_count++;
|
||||
if (limit > 0)
|
||||
limit--;
|
||||
|
|
Loading…
Reference in New Issue