fixed bug #679761
[fw/sdcc] / src / SDCCsymt.c
index 588935e69a086b233399593129bd9e0eac07c9d0..cebe16c5f36757adbf8b323f95dbc706af850b99 100644 (file)
@@ -990,14 +990,16 @@ addSymChain (symbol * symHead)
            werror (E_EXTERN_MISMATCH, csym->name);
            continue;
          }
-         /* delete current entry */
-         deleteSym (SymbolTab, csym, csym->name);
-         deleteFromSeg(csym);
        } else {
          /* not extern */
-         werror (E_DUPLICATE, sym->name);
-         continue;
+         if (compareType (csym->type, sym->type) != 1) {
+           werror (E_DUPLICATE, sym->name);
+           continue;
+         }
        }
+       /* delete current entry */
+       deleteSym (SymbolTab, csym, csym->name);
+       deleteFromSeg(csym);
       }
 
       /* add new entry */
@@ -1921,6 +1923,10 @@ processFuncArgs (symbol * func)
          SPEC_STAT (val->etype) = SPEC_STAT (val->sym->etype) =
            SPEC_STAT (func->etype);
        }
+      if (!isinSet(operKeyReset, val->sym)) {
+       addSet (&operKeyReset, val->sym);
+       applyToSet (operKeyReset, resetParmKey);
+      }
       val = val->next;
     }
 }