[Bug]: ERROR:SlitherSolcParsing: Failed to convert IR to SSA for EnumerableSetLib contract.
- Dominant language
- Python
- Stars
- 6.4k
- Forks
- 1.1k
- PR merge metrics
- No merged PRs in 30d
Description
### Describe the issue:
We're inheriting [EnumerableSetLib from Solady](https://github.com/Vectorized/solady/blob/main/src/utils/EnumerableSetLib.sol) and there's an issue generating SlithIR.
It does a lot of nasty assembly optimizations, but it would be nice to still be able to run Slither against our project.
### Code example to reproduce the issue:
https://github.com/Vectorized/solady/blob/main/src/utils/EnumerableSetLib.sol
### Version:
0.10.2
### Relevant log output:
```shell
slither contracts --solc-disable-warnings --filter-paths "lib/|test/|"
'forge clean' running (wd: /Users/eli/Documents/Projects/audits/PROJECT_NAME/contracts)
'forge config --json' running
'forge build --build-info --skip */test/** */script/** --force' running (wd: /Users/eli/Documents/Projects/audits/PROJECT_NAME/contracts)
ERROR:SlitherSolcParsing:
Failed to convert IR to SSA for EnumerableSetLib contract. Please open an issue https://github.com/crytic/slither/issues.
Traceback (most recent call last):
File "/Users/eli/.pyenv/versions/3.12.2/bin/slither", line 33, in
sys.exit(load_entry_point('slither-analyzer', 'console_scripts', 'slither')())
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/Users/eli/.pyenv/versions/3.12.2/lib/python3.12/site-packages/slither/__main__.py", line 753, in main
main_impl(all_detector_classes=detectors, all_printer_classes=printers)
File "/Users/eli/.pyenv/versions/3.12.2/lib/python3.12/site-packages/slither/__main__.py", line 859, in main_impl
) = process_all(filename, args, detector_classes, printer_classes)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/Users/eli/.pyenv/versions/3.12.2/lib/python3.12/site-packages/slither/__main__.py", line 107, in process_all
) = process_single(compilation, args, detector_classes, printer_classes)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/Users/eli/.pyenv/versions/3.12.2/lib/python3.12/site-packages/slither/__main__.py", line 80, in process_single
slither = Slither(target, ast_format=ast, **vars(args))
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/Users/eli/.pyenv/versions/3.12.2/lib/python3.12/site-packages/slither/slither.py", line 199, in __init__
self._init_parsing_and_analyses(kwargs.get("skip_analyze", False))
File "/Users/eli/.pyenv/versions/3.12.2/lib/python3.12/site-packages/slither/slither.py", line 219, in _init_parsing_and_analyses
raise e
File "/Users/eli/.pyenv/versions/3.12.2/lib/python3.12/site-packages/slither/slither.py", line 215, in _init_parsing_and_analyses
parser.analyze_contracts()
File "/Users/eli/.pyenv/versions/3.12.2/lib/python3.12/site-packages/slither/solc_parsing/slither_compilation_unit_solc.py", line 593, in analyze_contracts
self._convert_to_slithir()
File "/Users/eli/.pyenv/versions/3.12.2/lib/python3.12/site-packages/slither/solc_parsing/slither_compilation_unit_solc.py", line 834, in _convert_to_slithir
raise e
File "/Users/eli/.pyenv/versions/3.12.2/lib/python3.12/site-packages/slither/solc_parsing/slither_compilation_unit_solc.py", line 829, in _convert_to_slithir
contract.convert_expression_to_slithir_ssa()
File "/Users/eli/.pyenv/versions/3.12.2/lib/python3.12/site-packages/slither/core/declarations/contract.py", line 1579, in convert_expression_to_slithir_ssa
func.generate_slithir_ssa(all_ssa_state_variables_instances)
File "/Users/eli/.pyenv/versions/3.12.2/lib/python3.12/site-packages/slither/core/declarations/function_contract.py", line 140, in generate_slithir_ssa
add_ssa_ir(self, all_ssa_state_variables_instances)
File "/Users/eli/.pyenv/versions/3.12.2/lib/python3.12/site-packages/slither/slithir/utils/ssa.py", line 206, in add_ssa_ir
fix_phi_rvalues_and_storage_ref(
File "/Users/eli/.pyenv/versions/3.12.2/lib/python3.12/site-packages/slither/slithir/utils/ssa.py", line 526, in fix_phi_rvalues_and_storage_ref
fix_phi_rvalues_and_storage_ref(
File "/Users/eli/.pyenv/versions/3.12.2/lib/python3.12/site-packages/slither/slithir/utils/ssa.py", line 526, in fix_phi_rvalues_and_storage_ref
fix_phi_rvalues_and_storage_ref(
File "/Users/eli/.pyenv/versions/3.12.2/lib/python3.12/site-packages/slither/slithir/utils/ssa.py", line 526, in fix_phi_rvalues_and_storage_ref
fix_phi_rvalues_and_storage_ref(
[Previous line repeated 18 more times]
File "/Users/eli/.pyenv/versions/3.12.2/lib/python3.12/site-packages/slither/slithir/utils/ssa.py", line 497, in fix_phi_rvalues_and_storage_ref
last_name(dst, ir.lvalue, init_local_variables_instances) for dst in ir.nodes
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/Users/eli/.pyenv/versions/3.12.2/lib/python3.12/site-packages/slither/slithir/utils/ssa.py", line 363, in last_name
assert candidates
AssertionError
```
Contributor guide
Assessment
This issue has not been assessed yet.