Compiler Bug Causes Compiler Bug: How a 12-Year-Old G++ Bug Took Down Solidity
9 months ago
- #Solidity
- #Compiler
- #C++
- Solidity编译器(Solc)因G++、Boost和C++20的组合缺陷而在有效代码上崩溃
- 该问题源于G++存在12年的函数重载解析错误——错误地优先选择非成员函数
- C++20的对称比较特性与Boost过时的比较模式结合时会导致无限递归
- Boost 1.75之前的版本存在有问题的operator==实现,会在C++20下触发递归重写
- 当处理编译期有理数比较(如T[0])时,Solidity会出现崩溃
- 受影响环境包括:G++ < 14版本、Boost < 1.75版本及启用C++20的构建
- 建议解决方案:升级Boost至≥1.75版本或使用G++ v14+版本
- 该事件揭示了构建栈的脆弱性,以及多版本编译器/库测试的重要性