changeset 876:f93bf97bbd1f

fix
author Shinji KONO <kono@ie.u-ryukyu.ac.jp>
date Wed, 02 Apr 2014 12:44:48 +0900
parents 34ecf0e6304a
children 6955ee41688f
files Changes mc-codegen.c
diffstat 2 files changed, 24 insertions(+), 8 deletions(-) [+]
line wrap: on
line diff
--- a/Changes	Wed Apr 02 12:00:47 2014 +0900
+++ b/Changes	Wed Apr 02 12:44:48 2014 +0900
@@ -9992,9 +9992,27 @@
 
 recursive macro の結果が逆。
 
-
-
-
-
-
-
+Wed Apr  2 12:12:34 JST 2014
+
+LOCAL_STRUCT_INIT_STATIC は、定数の初期化をした構造体を static で用意して、それをlocalにコピーして、
+実行時に変更部分だけ代入するという実装。
+
+構造体の初期化は、
+     parse_mode = 1 ( inmode ) & local_struct_static
+でないと動かなくなっている。
+
+expr14 の中で LOCAL_STRUCT_INIT_STATIC すると、再帰的に行われるので、local struct を再利用する必要があるが、
+その時の offset を知りえないという問題がある。
+
+decl_data 側で再帰構造定義を処理してやると、それは避けられるらしい。
+
+local_struct_static 以外だといろいろ動かなくなっているようだ。
+
+でも、局所構造体はゼロ初期化しなければならないので、local_struct_static が正しいだろう。
+ということは、decl_data 側で再帰定義を扱うのが正しいのだろうな。
+
+local_struct_offset を大域変数にしてやれば良い。
+
+
+
+
--- a/mc-codegen.c	Wed Apr 02 12:00:47 2014 +0900
+++ b/mc-codegen.c	Wed Apr 02 12:44:48 2014 +0900
@@ -4072,9 +4072,7 @@
 data_closing(int e)
 {
     if (!chk) {
-	int smode = mode; mode = STADECL;
 	if (decl_str_init) flush_delayed_decl_data(e);
-	mode = smode;
 	emit_data_closing(ncaddr(e));
     }
 }