(57)【特許請求の範囲】
【請求項１】
プログラム中で宣言した配列の範囲外を参照する配列範囲外アクセスを検出する配列範囲外アクセス検出方式であって、
参照対象となる、添字が付与された配列を含むプログラムを解析し、該プログラムを並列化等の最適化が可能な最大範囲である範囲外アクセスチェック単位に分割する範囲外アクセスチェック単位解析手段と、
前記範囲外アクセスチェック単位に含まれる、参照対象となる全ての配列及びその各次元の添字をそれぞれ抽出する範囲外アクセスチェック対象検出手段と、
前記範囲外アクセスチェック対象検出手段で抽出した配列を、その次元数及び各次元の上限値及び下限値が一致している同形状類に分類し、前記同形状類をその全次元の添字の値が一致しているアクセス類に分類し、前記アクセス類の代表要素をそれぞれ決定する範囲外アクセスチェック配列類別手段と、
前記範囲外アクセスチェック対象検出手段で抽出した添字を、同一の値となる添字類に分類する範囲外アクセスチェック添字類別手段と、
前記アクセス類の代表要素の各次元の添字を比較し、範囲外アクセス検出対象とする前記アクセス類の代表要素を決定する範囲外アクセスチェック対象決定手段と、
前記範囲外アクセス検出対象である配列の各次元の添字の最大値及び最小値を計算するためのコードを生成し、該コードを、前記範囲外アクセスチェック単位の外に代入文として、または前記範囲外アクセスチェック単位内にリダクション形式にて配置する範囲外アクセスチェックコード挿入手段と、
を有する配列範囲外アクセス検出方式。
【請求項２】
前記範囲外アクセスチェック対象決定手段は、
前記アクセス類の代表要素の各次元の添字を比較し、前記範囲外アクセスチェック配列類別手段により分類された同じ同形状類に含まれ、かつ各次元の添字の値が最も大きくなるアクセス類、及び各次元の添字の値が最も小さくなるアクセス類が他に存在する場合に、そのアクセス類の代表要素を範囲外アクセス検出対象から除外し、残りの前記アクセス類の代表要素を前記範囲外アクセス検出対象とする請求項１記載の配列範囲外アクセス検出方式。
【請求項３】
プログラム中で宣言した配列の範囲外を参照する配列範囲外アクセスを検出するための配列範囲外アクセス検出方法であって、
処理装置が、参照対象となる、添字が付与された配列を含むプログラムを解析し、該プログラムを並列化等の最適化が可能な最大範囲である範囲外アクセスチェック単位に分割し、
前記範囲外アクセスチェック単位に含まれる、参照対象となる全ての配列及びその各次元の添字をそれぞれ抽出し、
前記抽出した配列を、その次元数及び各次元の上限値及び下限値が一致している同形状類に分類し、前記同形状類をその全次元の添字の値が一致しているアクセス類に分類し、前記アクセス類の代表要素をそれぞれ決定し、
前記抽出した添字を、同一の値となる添字類に分類し、
前記アクセス類の代表要素の各次元の添字を比較し、範囲外アクセス検出対象とする前記アクセス類の代表要素を決定し、
前記範囲外アクセス検出対象である配列の各次元の添字の最大値及び最小値を計算するためのコードを生成し、該コードを、前記範囲外アクセスチェック単位の外に代入文として、または前記範囲外アクセスチェック単位内にリダクション形式にて配置する配列範囲外アクセス検出方法。
【請求項４】
前記アクセス類の代表要素の各次元の添字を比較し、前記の同じ同形状類に含まれ、かつ各次元の添字の値が最も大きくなるアクセス類、及び各次元の添字の値が最も小さくなるアクセス類が他に存在する場合に、そのアクセス類の代表要素を範囲外アクセス検出対象から除外し、残りの前記アクセス類の代表要素を前記範囲外アクセス検出対象とする請求項３記載の配列範囲外アクセス検出方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明はアプリケーションプログラム実行中における配列範囲外アクセスを検出するための配列範囲外アクセス検出方式及び方法に関する。
【背景技術】
【０００２】
ＦＯＲＴＲＡＮやＣ言語等を用いてアプリケーションプログラムを作成・実行する場合、プログラムエラーの多くはアプリケーションプログラム中で宣言した配列の範囲外を参照する配列範囲外アクセスに起因する。そのため、一般に、ＦＯＲＴＲＡＮやＣ言語等を機械語に変換するコンパイラには、このような配列範囲外アクセスを検出してエラー表示を行うための機能が用意されている。また、アプリケーションプログラム自身に、配列範囲外アクセスが発生した場合に外部へ通知するためのプログラムが組み込まれていることもある。
【０００３】
配列範囲外アクセスの検出方式としては、配列要素を参照する直前に、その添字で定義される値と宣言された配列の上限値及び下限値とを逐次比べることで、配列範囲外に対するアクセスであるか否かを判定する方式が一般的である。
【０００４】
なお、アプリケーションプログラムのＤＯループ内で参照される配列を検出し、該配列の参照の仕方に応じて、該ＤＯループの実行直前に、該配列の上限値及び下限値と、添字の最大値及び最小値を比較することで、配列範囲外に対するアクセスであるか否かを検出する構成が特許文献１に記載されている。
【特許文献１】特開平０４−０２１０３０号公報
【発明の開示】
【発明が解決しようとする課題】
【０００５】
しかしながら上記したような従来の配列範囲外アクセス検出方式では、アプリケーションプログラムの配列参照の数が増えると、それに比例して、配列範囲外に対するアクセスであるか否かを判定するための処理の負荷が増大するため、プログラムの実行に膨大な時間を要する問題がある。
【０００６】
また、配列要素の参照の直前にその添字で定義される値と宣言された配列の上限値及び下限値とを逐次比べる方式では、コンパイラによる並列化やベクトル化といった最適化が抑制され、プログラムの実行に膨大な時間を要する問題がある。
【０００７】
また、アプリケーションプログラムのＤＯループ内で参照される配列を検出し、該配列の参照の仕方に応じて、該ＤＯループの実行直前に、該配列の上限値及び下限値と、添字の最大値及び最小値を比較する方式では、該ＤＯループの中で添字値が計算されている場合、添字値の計算を該ＤＯループの実行直前に改めて行うため、添字式の計算を二重に行うことになり、プログラムの実行速度が低下する問題がある。
【０００８】
また、アプリケーションプログラムのＤＯループ内で参照される配列を検出し、該配列の参照の仕方に応じて、該ＤＯループの実行直前に、該配列の上限値及び下限値と、添字の最大値及び最小値を比較する方式では、該ＤＯループの中で添字値が計算されている場合、添字値の計算に、乱数計算等の副作用のある演算が含まれていると、添字式の計算を二重に行うことができないため、適用できない問題がある。
【０００９】
本発明は上記したような従来の技術が有する問題点を解決するためになされたものであり、コンパイラ等による最適化処理を阻害することなく、配列範囲外アクセスを高速に検出できる配列範囲外アクセス検出方式及び方法を提供することを目的とする。
【課題を解決するための手段】
【００１０】
上記目的を達成するため本発明の配列範囲外アクセス検出方式は、プログラム中で宣言した配列の範囲外を参照する配列範囲外アクセスを検出する配列範囲外アクセス検出方式であって、
参照対象となる、添字が付与された配列を含むプログラムを解析し、該プログラムを並列化等の最適化が可能な最大範囲である範囲外アクセスチェック単位に分割する範囲外アクセスチェック単位解析手段と、
前記範囲外アクセスチェック単位に含まれる、参照対象となる全ての配列及びその各次元の添字をそれぞれ抽出する範囲外アクセスチェック対象検出手段と、
前記範囲外アクセスチェック対象検出手段で抽出した配列を、その次元数及び各次元の上限値及び下限値が一致している同形状類に分類し、前記同形状類をその全次元の添字の値が一致しているアクセス類に分類し、前記アクセス類の代表要素をそれぞれ決定する範囲外アクセスチェック配列類別手段と、
前記範囲外アクセスチェック対象検出手段で抽出した添字を、同一の値となる添字類に分類する範囲外アクセスチェック添字類別手段と、
前記アクセス類の代表要素の各次元の添字を比較し、範囲外アクセス検出対象とする前記アクセス類の代表要素を決定する範囲外アクセスチェック対象決定手段と、
前記範囲外アクセス検出対象である配列の各次元の添字の最大値及び最小値を計算するためのコードを生成し、該コードを、前記範囲外アクセスチェック単位の外に代入文として、または前記範囲外アクセスチェック単位内にリダクション形式にて配置する範囲外アクセスチェックコード挿入手段と、
を有する構成である。
【００１１】
一方、本発明の配列範囲外アクセス検出方法は、プログラム中で宣言した配列の範囲外を参照する配列範囲外アクセスを検出するための配列範囲外アクセス検出方法であって、
処理装置が、参照対象となる、添字が付与された配列を含むプログラムを解析し、該プログラムを並列化等の最適化が可能な最大範囲である範囲外アクセスチェック単位に分割し、
前記範囲外アクセスチェック単位に含まれる、参照対象となる全ての配列及びその各次元の添字をそれぞれ抽出し、
前記抽出した配列を、その次元数及び各次元の上限値及び下限値が一致している同形状類に分類し、前記同形状類をその全次元の添字の値が一致しているアクセス類に分類し、前記アクセス類の代表要素をそれぞれ決定し、
前記抽出した添字を、同一の値となる添字類に分類し、
前記アクセス類の代表要素の各次元の添字を比較し、範囲外アクセス検出対象とする前記アクセス類の代表要素を決定し、
前記範囲外アクセス検出対象である配列の各次元の添字の最大値及び最小値を計算するためのコードを生成し、該コードを、前記範囲外アクセスチェック単位の外に代入文として、または前記範囲外アクセスチェック単位内にリダクション形式にて配置する方法である。
【００１２】
上記のような配列範囲外アクセス検出方式及び方法では、コンパイラ等による最適化が可能なプログラム範囲である範囲外アクセスチェック単位を設定し、範囲外アクセス検出対象となる配列の各次元の添字の最大値及び最小値を計算するためのコードを生成し、該コードを、範囲外アクセスチェック単位の外に代入文として、または範囲外アクセスチェック単位内にリダクション形式にて配置することで、コンパイラ等による最適化処理を阻害することなく、配列範囲外アクセスを検出できる。また、添字を同一の値を取るものどうしで分類し、該分類した添字類にしたがって配列範囲外アクセスであるか否かの判定に用いる最大値及び最小値を計算するため、同一の値を持つ添字については最大値及び最小値を１度だけ計算することになる。そのため、最大値及び最小値の計算対象数が最小限に抑制される。
【発明の効果】
【００１３】
本発明によれば、コンパイラ等による最適化処理を阻害することなく、配列範囲外アクセスを検出できる。また、最大値及び最小値の計算対象数が最小限に抑制されるため、配列範囲外アクセスを高速に検出できる。
【００１４】
さらに、本発明によれば、プログラムにおいて、添字の値の計算に、乱数計算等の副作用のある演算が含まれる場合にも、範囲外アクセスの検出が可能である。その理由は、配列の添字値自身の計算はオリジナルプログラムの値をそのまま採用し、プログラムの別の場所で改めて添字の計算を行わないためである。
【発明を実施するための最良の形態】
【００１５】
次に本発明について図面を参照して説明する。
【００１６】
図１は本発明の配列範囲外アクセス検出方式の一構成例を示すブロック図である。
【００１７】
図１に示すように、本発明の配列範囲外アクセス検出方式１００は、範囲外アクセスチェック単位解析手段１０１、範囲外アクセスチェック対象検出手段１０２、範囲外アクセスチェック配列類別手段１０３、範囲外アクセスチェック添字類別手段１０４、範囲外アクセスチェック対象決定手段１０５及び範囲外アクセスチェックコード挿入手段１０６を有する構成である。本発明の配列範囲外アクセス検出方式１００は、ＦＯＲＴＲＡＮやＣ言語等を機械語に変換するコンパイラに適用することが好ましい。
【００１８】
上記範囲外アクセスチェック単位解析手段１０１、範囲外アクセスチェック対象検出手段１０２、範囲外アクセスチェック配列類別手段１０３、範囲外アクセスチェック添字類別手段１０４、範囲外アクセスチェック対象決定手段１０５及び範囲外アクセスチェックコード挿入手段１０６は、例えば論理回路等から成るＬＳＩ、あるいはプログラムにしたがってこれらの機能を実現するＤＳＰやＣＰＵ等の処理装置によって実現される。なお、配列範囲外アクセスの検出対象としては、配列の各次元の宣言範囲外に対するアクセスがある。
【００１９】
範囲外アクセスチェック単位解析手段１０１は、配列範囲外アクセスのコスト（処理時間や処理負荷等）を最小とするために、参照対象となる添字が付与された配列を含むプログラムを解析し、該プログラムを、例えばループ処理のように、ベクトル化や並列化等の最適化が可能な範囲内で、できるだけ大きな単位に分割する。以下、この分割単位を範囲外アクセスチェック単位と呼ぶ。
【００２０】
範囲外アクセスチェック対象検出手段１０２は、範囲外アクセスチェック単位解析手段１０１にて分割した範囲外アクセスチェック単位で、その中に含まれる参照対象となる全ての配列及びその各次元の添字をそれぞれ抽出する。
【００２１】
範囲外アクセスチェック配列類別手段１０３は、範囲外アクセスチェック単位解析手段１０１で分割した範囲外アクセスチェック単位で、範囲外アクセスチェック対象検出手段１０２で抽出した添字付き配列の集合を、次元数及び各次元の上限値及び下限値が一致しているものどうしで分類する。この分類単位を同形状類と呼ぶ。
【００２２】
また、範囲外アクセスチェック配列類別手段１０３は、各同形状類をその全次元の添字の値が常に一致しているものどうしで分類する。この分類単位をアクセス類と呼ぶ。さらに、各アクセス類の代表要素を任意に１つ決定する。
【００２３】
範囲外アクセスチェック添字類別手段１０４は、範囲外アクセスチェック単位解析手段１０１にて分割した範囲外アクセスチェック単位で、範囲外アクセスチェック対象検出手段１０２で抽出した添字の集合を、常に同一の値を取るものどうしで分類する。この分類単位を添字類と呼ぶ。
【００２４】
範囲外アクセスチェック対象決定手段１０５は、範囲外アクセスチェック単位解析手段１０１で分割した範囲外アクセスチェック単位で、範囲外アクセスチェック配列類別手段１０３で分類した全てのアクセス類の代表要素の各次元の添字を、範囲外アクセスチェック配列類別手段１０３で分類した同一の同形状類に含まれるもの同士で比較し、範囲外アクセス検出対象から除外するアクセス類を抽出する。本発明では、このとき抽出されないアクセス類の代表要素の集合を範囲外アクセス検出対象とする。
【００２５】
範囲外アクセスチェックコード挿入手段１０６は、範囲外アクセスチェック単位解析手段１０１で分割した範囲外アクセスチェック単位で、範囲外アクセスチェック対象決定手段１０５で決定した範囲外アクセス検出対象である配列の各次元の添字の最大値及び最小値を計算するためのコードを生成する。さらに、範囲外アクセスチェックコード挿入手段１０６は、範囲外アクセス検出対象である配列の各次元の添字の値が対応する宣言範囲内にあるか否かをチェックするためのコードを生成する。
【００２６】
ここで、各次元の添字の最大値及び最小値の計算は、範囲外アクセスチェック添字類別手段１０４により分類した同一の値を持つ添字類については、重複することなく１度だけ実行することになるため、最大値及び最小値の計算対象数が最小限になる。
【００２７】
また、最大値及び最小値を計算するためのコードは、コンパイラによるベクトル化や並列化等の最適化を阻害しないように、範囲外アクセスチェック単位の外に代入文として、または範囲外アクセスチェック単位内にリダクション形式にて配置する。
【００２８】
次に本発明の配列範囲外アクセス検出方式１００の動作について図２及び図３を用いて説明する。
【００２９】
図２は配列範囲外アクセス検出対象のプログラムの一例を示す模式図であり、図３は配列範囲外アクセスを検出するためのチェックコードを含むプログラムの一例を示す模式図である。
【００３０】
図２及び図３はそれぞれＦＯＲＴＲＡＮプログラムであり、図２に示す例では、処理の並列化が可能なＤＯ  Ｉループ中で３次元配列Ａ、Ｂ、及び１次元配列ＩＤＸが参照されることが示されている。この図２に示すプログラムを、配列の各次元の添字の最大値及び最小値を計算するためのコードや配列範囲外アクセスであるか否かをチェックするためのコードを含むプログラムに変換した例が図３である。
【００３１】
以下、図２に示したプログラムを図３に示すプログラムに変換する場合を例にして、本発明の配列範囲外アクセス検出方式１００の動作を説明する。
【００３２】
まず、配列範囲外アクセス検出方式１００は、範囲外アクセスチェック単位解析手段１０１により図２に示すプログラムを解析し、範囲外アクセスチェック単位を決定する。ここでは、ＤＯ  Ｉループが並列化可能な最大のプログラム単位であるため、このＤＯ  Ｉループ全体を範囲外アクセスチェック単位とする。
【００３３】
次に、配列範囲外アクセス検出方式１００は、範囲外アクセスチェック単位解析手段１０１にて決定した範囲外アクセスチェック単位に含まれる全ての配列及びその添字を範囲外アクセスチェック対象検出手段１０２により抽出する。ここでは、配列｛ＩＤＸ（Ｋ），Ａ（Ｉ，Ｊ，Ｊ），Ｂ（Ｉ，Ｊ，Ｊ），Ｂ（Ｉ＋１，Ｊ，Ｊ），Ｂ（Ｉ−１，Ｊ，Ｊ）｝と、その添字｛Ｋ，Ｉ，Ｊ，Ｊ，Ｉ，Ｊ，Ｊ，Ｉ＋１，Ｊ，Ｊ，Ｉ−１，Ｊ，Ｊ｝が抽出される。
【００３４】
次に、配列範囲外アクセス検出方式１００は、範囲外アクセスチェック配列類別手段１０３を用いて、範囲外アクセスチェック単位解析手段１０１で決定した範囲外アクセスチェック単位であるＤＯ  Ｉループのうち、範囲外アクセスチェック対象検出手段１０２で抽出した配列の集合｛ＩＤＸ（Ｋ），Ａ（Ｉ，Ｊ，Ｊ），Ｂ（Ｉ，Ｊ，Ｊ），Ｂ（Ｉ＋１，Ｊ，Ｊ），Ｂ（Ｉ−１，Ｊ，Ｊ）｝を、次元数及び全ての次元の上限値及び下限値が全て一致しているものどうしで分類する。ここでは、２つの同形状類｛ＩＤＸ（Ｋ）｝及び｛Ａ（Ｉ，Ｊ，Ｊ），Ｂ（Ｉ，Ｊ，Ｊ），Ｂ（Ｉ＋１，Ｊ，Ｊ），Ｂ（Ｉ−１，Ｊ，Ｊ）｝に分類される。
【００３５】
また、範囲外アクセスチェック配列類別手段１０３は、各同形状類を、全ての次元の添字の値が常に一致しているものどうしで分類し、その代表要素を決定する。ここでは、４つのアクセス類｛ＩＤＸ（Ｋ）｝、｛Ａ（Ｉ，Ｊ，Ｊ），Ｂ（Ｉ，Ｊ，Ｊ）｝、｛Ｂ（Ｉ＋１，Ｊ，Ｊ）｝及び｛Ｂ（Ｉ−１，Ｊ，Ｊ）｝に分類され、各アクセス類の代表要素として、ＩＤＸ（Ｋ）、Ａ（Ｉ，Ｊ，Ｊ）、Ｂ（Ｉ＋１，Ｊ，Ｊ）、Ｂ（Ｉ−１，Ｊ，Ｊ）が選択される。
【００３６】
次に、配列範囲外アクセス検出方式１００は、範囲外アクセスチェック添字類別手段１０４を用いて、範囲外アクセスチェック対象検出手段１０２で抽出した添字の集合｛Ｋ，Ｉ，Ｊ，Ｊ，Ｉ，Ｊ，Ｊ，Ｉ＋１，Ｊ，Ｊ．Ｉ−１，Ｊ，Ｊ｝を、常に同一の値を取るものどうしで分類する。ここでは、５つの添字類｛Ｋ｝、｛Ｉ−１｝、｛Ｉ，Ｉ｝、｛Ｊ，Ｊ，Ｊ，Ｊ，Ｊ，Ｊ，Ｊ，Ｊ｝及び｛Ｉ＋１｝に分割される。
【００３７】
次に、配列範囲外アクセス検出方式１００は、範囲外アクセスチェック対象決定手段１０５を用いて、範囲外アクセスチェック配列類別手段１０３で選択した各アクセス類の代表要素ＩＤＸ（Ｋ）、Ａ（Ｉ，Ｊ，Ｊ）、Ｂ（Ｉ＋１，Ｊ，Ｊ）、Ｂ（Ｉ−１，Ｊ，Ｊ）の各次元の添字を比較し、範囲外アクセス検出対象から除外するアクセス類を抽出する。範囲外アクセスチェック対象決定手段１０５は、例えば、範囲外アクセスチェック配列類別手段１０３が分類した同一の同形状類に含まれ、かつ各次元の添字の値が最も大きくなるアクセス類及び各次元の添字の値が最も小さくなるアクセス類が他に存在する場合に、そのアクセス類の代表要素を範囲外アクセス検出対象から除外する。ここでは、添字Ｉ＋１及びＩ−１を持たない代表要素Ａ（Ｉ，Ｊ，Ｊ）が抽出される。その他のアクセス類の代表要素ＩＤＸ（Ｋ）、Ｂ（Ｉ＋１，Ｊ，Ｊ）、Ｂ（Ｉ−１，Ｊ，Ｊ）は、範囲外アクセス検出対象となる。
【００３８】
次に、配列範囲外アクセス検出方式１００は、範囲外アクセスチェックコード挿入手段１０６を用いて、範囲外アクセスチェック対象決定手段１０５で選択した範囲外アクセス検出対象の代表配列ＩＤＸ（Ｋ）、Ｂ（Ｉ＋１，Ｊ，Ｊ）、Ｂ（Ｉ−１，Ｊ，Ｊ）の各次元の添字の最大値及び最小値を計算するためのコードを生成し、さらにそれらが先に宣言された範囲内にあるか否かをチェックするためのコードを生成する。
【００３９】
本発明では、範囲外アクセスチェック添字類別手段１０４にて分類した添字類を基に、同一の値を持つ添字については最大値及び最小値を１度だけ計算する。ここでは、Ｂ（Ｉ＋１，Ｊ，Ｊ）及びＢ（Ｉ−１，Ｊ，Ｊ）に含まれるＪについて、最大値及び最小値の計算を１度だけ行う。なお、ＩＤＸ（Ｋ）のＫ、Ｂ（Ｉ−１，Ｊ，Ｊ）のＩ−１やＢ（Ｉ＋１，Ｊ，Ｊ）のＩ＋１のように線形アクセスの添字の最大値及び最小値を計算するためのコードは、範囲外アクセスチェック単位であるＤＯ  Ｉループ中で計算する必要はなく、ＤＯ  Ｉループの始値及び終値から簡単に導出できる。
【００４０】
範囲外アクセスチェックコード挿入手段１０６によって生成されたコードは、図３に示すようになる。
【００４１】
図３に示すｍｉｎＩＭは、Ｉ−１の最小値を格納する変数であり、ＤＯ  Ｉループの始値−１の値（２−１＝１）が代入される。また、ｍａｘＩＭは、Ｉ−１の最大値を格納する変数であり、ＤＯ  Ｉループの終値−１の値（９９−１＝９８）が代入される。
【００４２】
また、図３に示すｍｉｎＩＰは、Ｉ＋１の最小値を格納する変数であり、ＤＯ  Ｉループの始値＋１の値（２＋１＝３）が代入される。さらに、ｍａｘＩＰは、Ｉ＋１の最大値を格納する変数であり、ＤＯ  Ｉループの終値＋１の値（９９＋１＝１００）が代入される。
【００４３】
また、図３に示すｍｉｎＫは、Ｋの最小値を格納する変数であり、ＤＯ  Ｋループの始値の値（１）が代入される。さらに、ｍａｘＫは、Ｋの最大値を格納する変数であり、ＤＯ  Ｋループの終値の値（１００）が代入される。
【００４４】
一方、Ｂ（Ｉ−１，Ｊ，Ｊ）、Ｂ（Ｉ＋１，Ｊ，Ｊ）の添字Ｊのように線形でない添字は、一般的には、上記ＫやＩ−１やＩ＋１のように最大値及び最小値を簡単に導出することはできないため、ＤＯ  Ｉループ内にリダクション形式にて最大値及び最小値を計算するためのコードを挿入する。
【００４５】
図３に示すｍｉｎＪはＪの最小値を格納する変数であり、ｍａｘＪはＪの最大値を格納する変数である。図３のＤＯ  Ｉループには、現在参照しているＪの値と、それ以前のループ処理時に参照した最小値とを比較し、より小さい値をｍｉｎＪに格納するためのコードが挿入されている。同様に、図３のＤＯ  Ｉループには、現在参照しているＪの値と、それ以前のループ処理時に参照した最大値とを比較し、より大きい値をｍａｘＪに格納するためのコードが挿入されている。
【００４６】
範囲外アクセスチェック単位解析手段１０１により決定した範囲外アクセスチェック単位であるループＤＯ  Ｉの処理が終了後、ｍｉｎＫ及びｍａｘＫの値と添字Ｋに対応するＩＤＸの上限値及び下限値とを比較し、ｍｉｎＩＭ及びｍａｘＩＭの値と添字Ｉ−１に対応するＢの１次元目の上限値及び下限値とを比較し、ｍｉｎＩＰ、ｍａｘＩＰの値と添字Ｉ＋１に対応するＢの１次元目の上下限値とを比較し、さらにｍｉｎＪ、ｍａｘＪの値と添字Ｊに対応するＢの２次元目及び３次元目の上限値及び下限値を比較することで、範囲外アクセスチェック単位内で範囲外アクセスが発生したか否かを判定する。
【００４７】
本発明によれば、コンパイラ等による最適化が可能な最大のプログラム範囲である範囲外アクセスチェック単位を設定し、範囲外アクセス検出対象となる配列の各次元の添字の最大値及び最小値を計算するためのコードを生成し、該コードを、前記範囲外アクセスチェック単位の外に代入文として、または前記範囲外アクセスチェック単位内にリダクション形式にて配置することで、コンパイラ等による最適化処理を阻害することなく、配列範囲外アクセスを検出できる。また、添字を同一の値を取るものどうしで分類し、該分類した添字類にしたがって配列範囲外アクセスであるか否かの判定に用いる最大値及び最小値を計算するため、同一の値を持つ添字については最大値及び最小値を１度だけ計算することになる。したがって、最大値及び最小値の計算対象数が最小限に抑制され、配列範囲外アクセスを高速に検出できる。
【図面の簡単な説明】
【００４８】
【図１】本発明の配列範囲内アクセス検出方式の一構成例を示すブロック図である。
【図２】配列範囲外アクセス検出対象のプログラムの一例を示す模式図である。
【図３】配列範囲外アクセスを検出するためのチェックコードを含むプログラムの一例を示す模式図である。
【符号の説明】
【００４９】
１００    配列範囲外アクセス検出方式
１０１    範囲外アクセスチェック単位解析手段
１０２    範囲外アクセスチェック対象検出手段
１０３    範囲外アクセスチェック配列類別手段
１０４    範囲外アクセスチェック添字類別手段
１０５    範囲外アクセスチェック対象決定手段
１０６    範囲外アクセスチェックコード挿入手段
【図１】
0004561998.tif 000002
【図２】
0004561998.tif 000003
【図３】
0004561998.tif 000004