トップ «前の日記(2008-04-14) 最新 次の日記(2008-04-16)» 編集

Orz日記 by Akio Morita

ToDo:

  • 15 SAD Fit[]回りの障害事例の解析
  • 10 smart pointer版PEGクラスの再実装(Left Recursionまわり)
2006|03|04|05|06|07|08|09|10|11|12|
2007|01|02|03|04|06|09|10|11|12|
2008|01|02|03|04|05|06|07|08|09|10|11|12|
2009|01|02|03|04|05|06|07|08|09|10|11|12|
2010|01|02|03|04|05|06|07|08|09|10|11|12|
2011|01|02|03|04|05|06|07|08|09|10|11|12|
2012|01|02|03|04|05|07|08|09|10|11|12|
2013|01|03|04|05|06|07|08|09|10|11|12|
2014|01|02|03|04|05|06|07|08|09|10|11|12|
2015|01|02|03|04|06|07|08|10|12|
2016|01|02|03|05|06|08|10|11|
2017|01|02|03|04|05|06|07|09|10|11|12|
2018|01|02|03|04|06|07|08|09|10|11|12|
2019|01|03|04|05|07|08|09|10|11|12|
2020|01|02|03|04|05|06|07|08|09|10|11|12|
2021|01|02|03|04|05|06|07|08|09|10|11|12|
2022|01|02|03|04|05|06|07|08|09|10|11|12|
2023|01|02|03|04|05|06|07|08|09|10|11|12|
2024|01|02|03|04|05|06|07|08|09|

2008-04-14 [長年日記]

_ [SAD]日報、未初期化変数参照の警告

残り警告数 63個まで減少、残存する未調査領域は 4ファイル(56警告)

ソース警告数
src/phsrot.f 1
src/tcsvdm.f 2
src/temit.f 3
src/tmulta.f 4
src/tmulte.f 9
src/tmulti.f19
src/tsolque.f 24
src/tturn.f 1

現時点で既知の問題点

  • PHSROTエレメントの実装(src/phsrot.f)での配列オフセットi_p0が未定義
    • i_p0はマジックナンバーであり、PHSROTの動作定義が実在しないので、原作者による修正待ち
  • qdcell @ src/qdcell.fの変数dcod1,dcod2,dcod3,dcod4detimx==0detimy==0の際に未初期化のまま参照される
    • (M-I)^{-1}を解く過程での逆行列演算の対象が退化している場合に発生
    • 通常は発生しないと考えられるのでアサーションを挿入して警告を消去、退化行列が入力された場合はアボートする
  • qdbend @ src/qdbend.fの変数が、ivkytbl(kwANGL,icBEND), kytbl(kwK1,icBEND)以外の時に未初期化のまま参照される。
    • 現時点で唯一の呼び出し元src/qdtwis.fは、iv==2もしくはiv==8で呼び出すので、アサーションを挿入して警告を消去
    • kytbl(kwFOO,icBAR)を使わずマジックナンバーを即値で記述しているコードは、src/initb1.fでの定義更新に対応できない保守性の低いコードなので将来的なバグの苗床になる可能性が高い
  • tweigh @ src/tffsmatch.fの引数ltypic(DRIFT|BEND|QUAD|SEXT|OCTU|DECA|DODECA|MULT|MARK)以外の場合に、tweigh関数の返り値が不定となる。
    • アサーションを挿入して警告を消去、返り値が未定義なltypで呼び出された際はアボートする
  • tintraconv @ src/temit.fの変数emx1,emy1,emz1TRPAかつINTRAな条件下でEmittance[]を呼び出すと未初期化なまま参照される。(EMITコマンドでは、一時的にTRPTフラグがクリアされているので影響しない)
    • アサーションを挿入、変数が未初期化のまま参照コードへ到達するとアボートする
    • 警告自体は未修正
  • tcsvdm @ src/tcsvdm.fの変数zcが、195行目付近からのi=min(mn,m-2),1,-1/j=m,i+2,-1な2重DOループで!(j < n+2) && !(s = abs(zs) > 1) && !(c > s)が成立するとき未初期化のまま参照される可能性が有る。
    • 行列a(i,j)は、!(j < n+2) && !(s = abs(zs) > 1)の際にsqrt(1/2) > sを満たすよう前処理されるとのコメント有り
    • 数値的な検証では、ssqrt(1/2)に近づくものの1 >= sqrt(1/2)となる事例は未確認
    • sが極めてsqrt(1/2)に近い場合、演算誤差と丸めが原因でc=sが成立する可能性は?
      • 安全側に倒す意味では、s=sqrt(1/2)の極限を想定してzcを初期化すべきか?

要調査なコード

  • tturn1 @ src/tturn.fの特殊なエレメント周辺での振る舞い
    • トラッキング対象区間の境界がSOLエレメントな場合
    • トラッキング対象区間の境界がSOLエレメントで挟まれている場合
    • RADLIGHT時にSOLエレメントで挟まれた領域内の取扱い

_ [雑記]セキュリティーmemo経由で知ったのだが

Fail-Safe Cという メモリ安全なANSI Cの実装が有るらしい。


カテゴリー: Admin | Emacs | EPICS | Fortran | FreeBSD | GCC | hgsubversion | IPv6 | KEKB | LHC | Lisp | LLVM | MADX | Ryzen | SAD | samba | tDiary | unix | WWW | YaSAI | お仕事 | イベント | 出張 | 宴会 | 数学 | 艦これ | 買いもの | 追記 | 雑記