「低レイヤを知りたい人のためのCコンパイラ作成入門」のポインタ加減算のテスト

各ステップのテストは自分で書くこともあれば、chibiccの該当部分のテストをそのまま使ってそれが通ればヨシ!ということにしている。

ポインタの加減算のところで少し注意が必要で、これはローカル変数をスタックに積む(領域を確保する)順番が問題になることがある。

int main() {
  int x = 3;
  int y = 5;
  return *(&y - 1);
}

このようなテスト用プログラムがあったときに、x、yの順番で積むかy、xの順番で積むかによって結果が変わる。

単純に作っていくと、ここで積み方が逆になっててひっかかることがある。というか、自分はひっかかった。 (*(&y + 1);にしないと通らない。)

GCCでローカル変数のアドレスを表示させてもchibiccのテストのような順番だったので、ここはテストが通るように実装しておいたほうが 良いのだろうと思い、それに従った。

何かルールがあるのかは調べていない。