Fixed a bug with local character arrays initialized with a string
authorceriel <none@none>
Wed, 15 Nov 1995 09:42:25 +0000 (09:42 +0000)
committerceriel <none@none>
Wed, 15 Nov 1995 09:42:25 +0000 (09:42 +0000)
lang/cem/cemcom.ansi/code.c
lang/cem/cemcom.ansi/idf.c

index 2f2f0f4..e16ae47 100644 (file)
@@ -37,6 +37,7 @@
 #include       "atw.h"
 #include       "assert.h"
 #include       "LLlex.h"
+#include       "align.h"
 #ifdef LINT
 #include       "l_lint.h"
 #endif /* LINT */
@@ -559,7 +560,7 @@ loc_init(expr, id)
                        C_df_dlb((label)df->df_address);
                } else {
                        C_lae_dlb((label)df->df_address, (arith)0);
-                       load_block(tp->tp_size, 1);
+                       load_block(tp->tp_size, word_align);
                        if (unknownsize) {
                                /* tmpoffset += tp->tp_size; */
                                unknownsize = 0;
@@ -570,7 +571,7 @@ loc_init(expr, id)
                                                    , df->df_sc);
                        }
                        C_lal(tmpoffset);
-                       store_block(tp->tp_size, 1);
+                       store_block(tp->tp_size, tmpoffset % word_align ? 1 : word_align);
                        df->df_address = tmpoffset;
                        tmpoffset = 0;
                }
index 1e6fa24..a6d4548 100644 (file)
@@ -235,11 +235,13 @@ declare_idf(ds, dc, lvl)
                                                idf->id_text);
                                /** type = idf->id_def->df_type = int_type; **/
                                }
-                               newdef->df_address =
+                               if (type->tp_size != (arith) -1) {
+                                   newdef->df_address =
                                        NewLocal(type->tp_size,
                                                 type->tp_align,
                                                 regtype(type),
                                                 sc);
+                               }
                                break;
                        case STATIC:
                                newdef->df_address = (arith) data_label();