クラッシュを引き起こす複雑な定数に関連するバグ

Niels Jensen は、クラッシュを引き起こす複雑な定数に関連するバグを送信しました。修正しました。

今日は、組み込み関数を解決して単純化する方法について取り組みました。このABS関数は、組み込みであると認識され、引数の型によって正しい関数を選択するという意味で機能するようになりました。定数引数も簡素化されます。現在の計画はREAL、DBLEおよび CMPLX関数を取得し、既存の _convert プレースホルダー関数を置き換えることです。

6月29日
今夜はコードはありませんが、多くのことを考えました。主に、解決フェーズがどのように機能しなければならないかの詳細と、単純化がこのプロセスにどのように機能するかについてです。

私の根本的な認識は、解決段階で式ノードが書き換えられるということでした。引数リストに応じて、関数は同じ関数内であっても、さまざまなものを参照できます。解決フェーズの開始時に、名前が一般的か、具体的か、またはそのどちらでもないかが判断されます。この部分は引数リストに依存しないので、この情報はシンボルで格納できます。

シンボルの状態に応じて、3 つの手順のいずれかに従って、関数が実際に何を参照しているかを判断します。関数参照は、expr_type が EXPR_FUNCTION の式ノードとして表されます。’symbol’ メンバーは、呼び出されるシンボルを指します。引数リストを調べることで、別の名前 (外部関数、組み込み関数など) を指すように呼び出す関数を「再ターゲット」します。

「名前」とは、実際のシンボル名を意味し、アセンブラーに渡されるものです。組み込み関数の場合、名前には、組み込みサブルーチンへの参照であると判断する g95 以外の方法では呼び出すことができない文字が含まれます。

関数呼び出しの単純化は、組み込み関数に対してのみ発生し、関数が実際にその組み込み関数を参照することが決定されるとすぐに発生します。これらの関数は解決フェーズの前に簡略化する必要があるため、簡略化は初期化式に対しても個別に呼び出すことができる必要があります。この場合、解決策はなく、関数呼び出しは組み込み関数を参照する必要があります。

実際に先に進む前に、調査しなければならない奇妙なケースが 1 つあります。標準では、モジュール内の名前は USE ステートメントで名前を変更できることが指摘されており、この新しい名前への参照は依然として古い組み込み関数を参照しています…

6月28日
Niels Jensen から数日前に送信されたパッチを追加しました。これにより、ステートメントが受け入れられるまで警告を延期できます。これにより、ステートメント マッチャーで警告が発行され、後でステートメントが一致しなくなるという問題が解消されます。この状況は、不適切な警告メッセージになります。このパッチは、警告メッセージをエラー メッセージと同じ方法で保存します。

キャサリンの単純化サブルーチンのいくつかの例に取り組み始めました。最初のものは単なる ABS() です。

G95 は現在 18,000 行の長さです。

タイトルとURLをコピーしました