diff options
author | Jason Merrill <merrill@gnu.org> | 1994-10-20 22:06:20 +0000 |
---|---|---|
committer | Jason Merrill <merrill@gnu.org> | 1994-10-20 22:06:20 +0000 |
commit | 0393b857b1c992c941ebb1219d2ed567212587d2 (patch) | |
tree | 8f344264758347b3f07a447fb40c82ae42769e3e /gcc | |
parent | 5a841e0710d31147f7000a129bdf447d7566ec3a (diff) | |
download | gcc-0393b857b1c992c941ebb1219d2ed567212587d2.zip gcc-0393b857b1c992c941ebb1219d2ed567212587d2.tar.gz gcc-0393b857b1c992c941ebb1219d2ed567212587d2.tar.bz2 |
(add_to_list): Check for duplicates.
From-SVN: r8328
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/collect2.c | 21 |
1 files changed, 16 insertions, 5 deletions
diff --git a/gcc/collect2.c b/gcc/collect2.c index e0a2d7e..356bad0 100644 --- a/gcc/collect2.c +++ b/gcc/collect2.c @@ -1372,9 +1372,10 @@ add_to_list (head_ptr, name) struct head *head_ptr; char *name; { - struct id *newid = (struct id *) xcalloc (sizeof (*newid) + strlen (name), 1); + struct id *newid + = (struct id *) xcalloc (sizeof (struct id) + strlen (name), 1); + struct id *p; static long sequence_number = 0; - newid->sequence = ++sequence_number; strcpy (newid->name, name); if (head_ptr->first) @@ -1382,6 +1383,19 @@ add_to_list (head_ptr, name) else head_ptr->first = newid; + /* Check for duplicate symbols. */ + for (p = head_ptr->first; + strcmp (name, p->name) != 0; + p = p->next) + ; + if (p != newid) + { + head_ptr->last->next = 0; + free (newid); + return; + } + + newid->sequence = ++sequence_number; head_ptr->last = newid; head_ptr->number++; } @@ -1568,9 +1582,6 @@ scan_prog_file (prog_name, which_pass) end++) continue; -#ifdef COLLECT_QUALIFY_MATCH - COLLECT_QUALIFY_MATCH; -#endif *end = '\0'; switch (is_ctor_dtor (name)) |