KIND() またはその他の組み込み関数の引数

標準で探していたものを見つけました-変数などは、KIND() またはその他の組み込み関数の引数であり、照会関数の前に宣言する必要があります。これは、SGI コンパイラの動作が正しいことを意味します。g95 の場合、これは、式が実際に初期化式であるかどうかを確認する関数を作成する必要があることを意味します。指定式と制限式は似ているので、同時に取り組んでいきます。

1月19日
現在、初期化式を評価する方法/時期を整理しようとしています。Michael Richmond は今日、悪質なプログラムに影響を与えたバグ レポートを送信しました。

本当の (kind=kind(A)) :: A
実数 (kind=2*kind(B)) :: B
2 行目は、ほとんどのコンパイラ (ここにあるものすべて) がデフォルトの実数の kind=4 と倍精度の kind=8 を持っているという事実を悪用して、トラブルを求めています。では、既存のコンパイラはこれをどのように処理するのでしょうか?
IBM XLF90 および Compaq Digital Fortran では A が許可され、デフォルトの実数になり、B でエラーが発生します。

SGI は、kind() 組み込み関数でエンティティを使用する前に、エンティティに型が必要であると両方の行で不平を言っています。IMPLICIT REAL (A,B) を追加してブラフをコールしようとすると、同じメッセージが表示されます。

PGF90 は両方の行を許可し、効果的に B を再分類します。これは明らかにデフォルトの実数として始まりますが、最終的には倍精度に変更されます。

1月17日
右辺値が一致している戦略的な場所に g95_set_default_type() への呼び出しを追加しました。これにより、昨夜言及された問題が修正されます。うまくいけば、これでテスト スイートが改善されるでしょう。

1月16日
Tobi Schlüter さんは、複素共役演算中の算術演算を修正するパッチを送信しました。

数値照会組み込み関数を実装することで、テスト スイートがさらに改善されることを期待していました。これが起こらなかった理由は 2 つあります。まず、単純化関数が十分に積極的ではありませんでした。オペランドが定数でない場合、組み込み固有の単純化関数は呼び出されませんでした。数値照会関数の場合、重要な属性はオペランドの値ではなく、型と種類です。これを修正すると、g95 は解析パスでの型の割り当てに関して十分に積極的ではないことが判明しました。例えば:

整数、パラメータ :: i = huge(j)
型宣言ステートメントに到達するまでに、すべての IMPLICIT ステートメントが見られ、j の型がわかっていますが、g95 は現在、これを解決フェーズに任せています。これを上に移動する必要があります。

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