[hackers] [scc] [cc1] Fix definition of union types || Roberto E. Vargas Caballero
 
commit dd69378b91c35a62d9e2960fbad9ae11e4a06ec4
Author:     Roberto E. Vargas Caballero <k0ga_AT_shike2.com>
AuthorDate: Tue Sep 27 17:04:49 2016 +0200
Commit:     Roberto E. Vargas Caballero <k0ga_AT_shike2.com>
CommitDate: Tue Sep 27 17:04:49 2016 +0200
    [cc1] Fix definition of union types
    
    The size of unions was always wrong (and 0). This patch
    also fixes the offset of fields in unions, which must
    be 0 always.
diff --git a/cc1/types.c b/cc1/types.c
index f4fa6f9..44deac6 100644
--- a/cc1/types.c
+++ b/cc1/types.c
_AT_@ -176,7 +176,7 @@ typesize(Type *tp)
 {
         Symbol **sp;
         Type *aux;
-	unsigned long size;
+	unsigned long size, offset;
         int align, a;
         TINT n;
 
_AT_@ -200,10 +200,10 @@ typesize(Type *tp)
                  * field, and the size of a struct is the sum
                  * of the size of every field plus padding bits.
                  */
-		align = size = 0;
+		offset = align = size = 0;
                 n = tp->n.elem;
                 for (sp = tp->p.fields; n--; ++sp) {
-			(*sp)->u.i = size;
+			(*sp)->u.i = offset;
                         aux = (*sp)->type;
                         a = aux->align;
                         if (a > align)
_AT_@ -212,8 +212,9 @@ typesize(Type *tp)
                                 if (--a != 0)
                                         size += (size + a) & ~a;
                                 size += aux->size;
+				offset = size;
                         } else {
-				if (tp->size > size)
+				if ((*sp)->type->size > size)
                                         size = aux->size;
                         }
                 }
Received on Tue Sep 27 2016 - 17:07:54 CEST
This archive was generated by hypermail 2.3.0
: Tue Sep 27 2016 - 17:12:15 CEST