* src/SDCCsymt.c (copyLinkChain): fixed bug 770487, copy structdef and fields-list too
authorbernhardheld <bernhardheld@4a8a32a2-be11-0410-ad9d-d568d2c75423>
Thu, 24 Nov 2005 15:27:36 +0000 (15:27 +0000)
committerbernhardheld <bernhardheld@4a8a32a2-be11-0410-ad9d-d568d2c75423>
Thu, 24 Nov 2005 15:27:36 +0000 (15:27 +0000)
* src/SDCCast.c (createIvalArray): removed obsolete comment

git-svn-id: https://sdcc.svn.sourceforge.net/svnroot/sdcc/trunk/sdcc@3979 4a8a32a2-be11-0410-ad9d-d568d2c75423

ChangeLog
src/SDCCast.c
src/SDCCsymt.c

index 2d2d55c1951148fc272b29df487ba53893d1c90a..85785c48fceba2d84e22b074ef4288180f43c77f 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,9 @@
+2005-11-24 Bernhard Held <bernhard AT bernhardheld.de>
+
+       * src/SDCCsymt.c (copyLinkChain): fixed bug 770487, copy structdef
+       and fields-list too
+       * src/SDCCast.c (createIvalArray): removed obsolete comment
+
 2005-11-24 Borut Razem <borut.razem AT siol.net>
 
        * sdcc/device/lib/Makefile.in: remove all unnecessary files, 2nd try...
index d82a071942e6a1615652bc0b8433f36489bc0703..83214a5abd2442bc0fe828f85cde3d527e8ceea6 100644 (file)
@@ -991,7 +991,6 @@ createIvalArray (ast * sym, sym_link * type, initList * ilist)
     /* if we have not been given a size  */
     if (!DCL_ELEM (type))
     {
-        /* but this still updates the typedef instead of the instance ! see bug 770487 */
         DCL_ELEM (type) = size;
     }
 
index 1f24805d4b7c39d879352a46a2e9ea05443a5d08..7d10d227f6a86fc61038ab1e9638a600d368004c 100644 (file)
@@ -328,6 +328,20 @@ newStruct (char *tag)
   return s;
 }
   
+/*------------------------------------------------------------------*/
+/* copyStruct - copies a structdef including the fields-list        */
+/*------------------------------------------------------------------*/
+static structdef *
+copyStruct (structdef *src)
+{
+  structdef *dest;
+
+  dest = newStruct ("");
+  memcpy (dest, src, sizeof (structdef));
+  dest->fields = copySymbolChain (src->fields);
+  return dest;
+}
+  
 /*------------------------------------------------------------------*/
 /* sclsFromPtr - Return the storage class a pointer points into.    */
 /*               S_FIXED is returned for generic pointers or other  */
@@ -1630,6 +1644,8 @@ copyLinkChain (sym_link * p)
   while (curr)
     {
       memcpy (loop, curr, sizeof (sym_link));   /* copy it */
+      if (IS_STRUCT (loop))
+        SPEC_STRUCT (loop) = copyStruct (SPEC_STRUCT (loop));
       loop->next = (curr->next ? newLink (curr->next->class) : (void *) NULL);
       loop = loop->next;
       curr = curr->next;