これはあなたが探していた答えではないかもしれませんが、数年前、私はシステムの一部が高水準言語で書かれたプロジェクトに取り組みました。このプロジェクトでは、プロセス内にステート マシンを簡単に構築できました。この言語は、その後コンパイルされる C コードを生成しました。このプロジェクトで使用していたコンパイラは gcc でした (バージョン 2.95 前後 - 引用しないでください。確かに 3.0 以前です)。私たちはいくつかのコード生成バグに遭遇しましたが、それは私の記憶によれば、あまり人気のないプロセッサを使用したことによるものでした [どのプロセッサを明らかにすると、プロジェクトについて私がすべきではないことが明らかになる可能性があるので、たとえそれが非常に昔のことであっても、それが何であったかは言わない].
私の近くの同僚は、コード生成のバグの 1 つを調査していました。これは約 20 万行の関数であり、すべての関数は大きな switch ステートメントであり、switch ステートメントの各ケースはそれぞれ約 50 ~ 1000 行です (その中にサブスイッチステートメントのいくつかのレイヤーがあります)。
私の記憶では、コードがクラッシュしていたのは、無効な操作を生成したか、他の何かのために既に占有されているレジスタに何かを格納したためでした。そのため、適切なコードのビットをヒットすると、不正なメモリ アクセスが原因で失敗しました。コードの長いサイズとは何の関係もありませんでした。なぜなら、私の同僚は最終的にコードを約 30 行にまで減らすことができたからです (多くの「これを切り取って、それでもうまくいかないかどうかを確認してみましょう」)。数日後、修正を加えた新しいバージョンのコンパイラがリリースされました。コンパイラ サービス契約に何千ドルも支払う価値があることを知ってうれしい.
ここで私が言いたいのは、最新のコンパイラは大量の大きなコードを許容するということです。「準拠するコンパイラが少なくともサポートしなければならない」という最小制限もあります。たとえば、コンパイラーは関数内で 127 レベルのネストされたステートメント (つまり、127 個の if、switch、while、および do-while の組み合わせ) をサポートする必要があると (記憶から) 確信しています。そして、どこかでの議論 (「コンパイラは 127 レベルのネストされたステートメントをサポートする必要がある」ということです) から、MSVC と GCC の両方がさらに多くのサポートをサポートしていることがわかりました (それを見つけるのをあきらめたほどです... )