Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

アトムへの非単射的マッチング:deref 命令に付随するはずの neqatom 命令が出ていない #101

Open
sano-jin opened this issue Jun 8, 2021 · 1 comment
Labels

Comments

@sano-jin
Copy link
Contributor

sano-jin commented Jun 8, 2021

アトムへの非単射的マッチング

deref 命令では,findatom と異なり,付随するはずの neqatom 命令が出ていません.

a(X, X).
a(X, Y), a(Y, X) :- b.

これは例えば -O3 --use-swaplink とかつけてコンパイルするとこんな感じになる(オプション有無はこのバグには関係ないが)

 spec           [1, 5]
 findatom     [1, 0, 'a'_2]
 deref        [3, 1, 1, 0]
 deref        [2, 1, 0, 1]
 func           [2, 'a'_2]
 eqatom         [3, 2]
 commit         ["_aXYa", 0]
 ...

注意すべきなのは neqatom 命令が出ていないこと.

neqatom が出ていないので,自己終端的なものにもマッチしてしまう.

結果,上記プログラムは,実行すると,

 b. @4.

になって停止する(二重解放やメモリリークも発生しているのではないか?と思ったけど,segmentation-fault までははしなかった)

findatom 命令を複数回行う際には neqatom 命令を出すのだが,deref を出す時は忘れているらしい.

@sano-jin sano-jin added the bug label Jun 8, 2021
k-ueda added a commit that referenced this issue Jan 1, 2023
@k-ueda
Copy link
Contributor

k-ueda commented Jan 1, 2023

fix/101 に修正案を置きました.

@k-ueda k-ueda mentioned this issue Jan 5, 2023
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

No branches or pull requests

2 participants