-
Notifications
You must be signed in to change notification settings - Fork 5
Open
Labels
Description
typedef c_end(R2){
c(R2) :- .
}.
typedef b_end(R1,R2){
b(R1) :- c_end(R2).
}.
a(X1,X2), $t[X1,X2] :- b_end($t) | yes.
a(b,c).
上の例題では, typedef b_endのTypeRuleでtypedef c_endを用いた型検査を行う.
本例題はコンパイルは通るがセグフォする.
Segmentation fault (core dumped)
デバッガで追いかけた所, 型検査の箇所ではなく, グラフ書換えのremoveground命令の実行でセグフォしているっぽい.(以下中間命令列抜粋)
commit ["_aX1X", 0]
newlist [2]
getlink [3, 1, 0]
addtolist [2, 3]
getlink [4, 1, 1]
addtolist [2, 4]
removeatom [1, 0]
removeground [2, 0] ...ここ
newatom [5, 0, 'yes'_0]
freeatom [1]
freeground [2]
proceed []
なお, あるtypedefが別のtypedefを呼び出さないようなCSLMNtal例題でも, グラフ書換えで同様にremoveground命令が使用されるが, 実行に成功し正しい結果が得られている.
typedef connect(R1,R2){
R1=R2.
}.
a(X1,X2), $t[X1,X2] :- connect($t) | b(X1,X2), $t[X1,X2].
a(X1,X1).
b(L0,L0).
Reactions are currently unavailable