「低レイヤを知りたい人のためのCコンパイラ作成入門」のポインタ加減算のテスト
各ステップのテストは自分で書くこともあれば、chibiccの該当部分のテストをそのまま使ってそれが通ればヨシ!ということにしている。
ポインタの加減算のところで少し注意が必要で、これはローカル変数をスタックに積む(領域を確保する)順番が問題になることがある。
int main() { int x = 3; int y = 5; return *(&y - 1); }
このようなテスト用プログラムがあったときに、x、yの順番で積むかy、xの順番で積むかによって結果が変わる。
単純に作っていくと、ここで積み方が逆になっててひっかかることがある。というか、自分はひっかかった。 (*(&y + 1);にしないと通らない。)
GCCでローカル変数のアドレスを表示させてもchibiccのテストのような順番だったので、ここはテストが通るように実装しておいたほうが 良いのだろうと思い、それに従った。
何かルールがあるのかは調べていない。