  Solidity compiler plays a key role in enabling the development of smart
contract applications on Ethereum by governing the syntax of a domain-specific
language called Solidity and performing compilation and optimization of
Solidity code. The correctness of Solidity compiler is critical in fostering
transparency, efficiency, and trust in industries reliant on smart contracts.
However, like other software systems, Solidity compiler is prone to bugs, which
may produce incorrect bytecodes on blockchain platforms, resulting in severe
security concerns. As a domain-specific compiler for smart contracts, Solidity
compiler differs from other compilers in many perspectives, posing unique
challenges to detect its bugs. To understand the bugs in Solidity compiler and
benefit future research, in this paper, we present the first systematic study
on 533 Solidity compiler bugs. We carefully examined their characteristics
(including symptoms, root causes, and distribution), and their triggering test
cases. Our study leads to seven bug-revealing takeaways for Solidity compiler.
Moreover, to study the limitations of Solidity compiler fuzzers and bring our
findings into practical scenarios, we evaluate three Solidity compiler fuzzers
on our constructed benchmark. The results show that these fuzzers are
inefficient in detecting Solidity compiler bugs. The inefficiency arises from
their failure to consider the interesting bug-inducing features, bug-related
compilation flags, and test oracles
