バグ報告
状況:
Cygwinでjostarディレクトリに移動して、以下のコマンドを実行します
java -cp coins/classes jostarfront.JostarDriver -coins:target=x86_64 sample/classtest.j
すると、以下のNULLポインタの例外が出力されます
Compile error in Jostar parser: java.lang.NullPointerException: Cannot invoke "coins.sym.Var.getSymType()" because "pSym" is null
Exception in thread "Thread-0" java.lang.NullPointerException: Cannot invoke "coins.ir.hir.HIR.getOperator()" because "pHir" is null
at coins.hir2lir.ConvToNewLIR.convertSubpDef(ConvToNewLIR.java:1329)
at coins.hir2lir.ConvToNewLIR.doConvert(ConvToNewLIR.java:1011)
at coins.driver.Driver.makeNewLirFromHir(Driver.java:1044)
at coins.driver.Driver.compile(Driver.java:2143)
at coins.driver.CompileThread.doCompile(CompileThread.java:229)
at coins.driver.CompileThread$Compiler.go(CompileThread.java:355)
at coins.driver.CompileThread$PassGroup.go(CompileThread.java:276)
at coins.driver.CompileThread.callPassGroup(CompileThread.java:535)
at coins.driver.CompileThread.run(CompileThread.java:594)
原因:
現時点の予測として、COINSのパッケージcoins.ir.hir.HIRにおいて、setChildメソッドが引数にNULLを指定するのを許しています。そのため、getChildメソッドがnullを返してしまいます。
これは仕様です。HIR APIの仕様には、NULLについて何の記述もありません。それが原因で、getChildメソッドの利用者が上記のエラーを作り出してしまいます。
対策:
HIRのAPIは広い範囲で使われている可能性があるので、それ自体に修正はしません。それゆえ、バグを引き起こしている部分だけ、nullチェックをすることでバグを修正していきます。この修正は0.04で反映されます