]> sourceware.org Git - libabigail.git/commitdiff
Don't possibly forget type definition when reading a CorpusGroup
authorDodji Seketeli <dodji@redhat.com>
Fri, 30 Mar 2018 14:22:28 +0000 (16:22 +0200)
committerDodji Seketeli <dodji@redhat.com>
Fri, 13 Apr 2018 09:09:26 +0000 (11:09 +0200)
Suppose type T was declared in the main corpus of a group, and suppose
it's a declaration-only type.  Later, when loading another corpus of
the group, we see a definition of T.  We should load the definition of
T and not just say that we have already seen T from the main corpus
and we just keep its declaration and never get its definition.

This is what this patch does.

* src/abg-dwarf-reader.cc (add_or_update_class_type): Look for
declaration-only-ness to determine if we've already seen the same
type from the main corpus of the group.

Signed-off-by: Dodji Seketeli <dodji@redhat.com>
src/abg-dwarf-reader.cc

index 0dd5c92b2599f6efd16cf2acf5f17a43477d1bb5..c95237c9da8e643904ef1bba764a5bd0ac98a7c6 100644 (file)
@@ -12978,11 +12978,23 @@ add_or_update_class_type(read_context&         ctxt,
            // TODO: if there is just one class for that name defined,
            // then re-use it.  Otherwise, don't.
            result = lookup_class_type(name, *corp);
-         if (result)
+         if (result
+             // If we are seeing a declaration of a definition we
+             // already had, or if we are seing a type with the same
+             // declaration-only-ness that we had before, then keep
+             // the one we already had.
+             && (result->get_is_declaration_only() == is_declaration_only
+                 || (!result->get_is_declaration_only()
+                     && is_declaration_only)))
            {
              ctxt.associate_die_to_type(die, result, where_offset);
              return result;
            }
+         else
+           // We might be seeing the definition of a declaration we
+           // already had.  In that case, keep the definition and
+           // drop the declaration.
+           result.reset();
        }
     }
 
This page took 0.043449 seconds and 5 git commands to generate.