The Git repository of the Libabigail Project
Go to file
Dodji Seketeli 065247c14c Don't canonicalize types not added to their context in abixml reader
This is the first patch of a series which aims at fixing bug
libabigail/19097.

The problem in that report is a result of several underlying issues.
This patch series address them in isolation.  The patches do not
update the reference output of the regression test as they should,
because they are all needed to get to a sane working state.  The test
reference output are thus adjusted in the last patch of the series.
Here are the short titles of the patches of the set, including this
one:

    Don't canonicalize types not added to their context in abixml reader
    Support updating a class in the abixml reader
    Fix emitting of referenced type in abixml writer
    Use abidw --abidiff in test-read-dwarf.cc
    Adjust regression tests reference output for the current patch set

Below is the cover letter of the first patch of the set.

The abixml reader sometimes (wrongly) canonicalizes types that are not
(yet) added to their context.  This can lead to comparison issues
because some information carried by some types are dependant on their
context (e.g, access specifiers) and can be important for type
comparison.  Right now, access specifiers for member types are no more
taken into account when comparing member types because DWARF emitters
do not necessarily keep a correct track of those; but when they do, we
better be prepared.  And in any case, it's wrong to have type
canonicalization happen on half backed types anyway.

So this patch fixes several spots where type canonicalization happens
on types that are not added to their scope.

	* src/abg-reader.cc (read_context::maybe_canonicalize_type):
	Assert that a class type that is scheduled for canonicalization
	must be in a scope.  We do this only for classes, for now.  The
	assert here helped to spot (and fix)  a lot of places where we
	were canonicalizing types without scope.
	(read_context::build_or_get_type_decl):  Canonicalize types here,
	when they are built and (hopefully) added to their scope.  There
	might be cases here where we try to canonicalize types that are
	not added to their scope.  That should bomb in the assert above,
	at least for class types, for now.  We'll then fix the places where
	the types are created, to make them properly scoped.
	(build_type_decl, build_qualified_type_decl)
	(build_pointer_type_def, build_reference_type_def)
	(build_array_type_def, build_enum_type_decl, build_typedef_decl):
	Do not try to canonicalize the types early, right when they are
	created.  Canonicalization should happen at the point where (or
	after) they are added to their scope.
	(build_class_decl): Likewise.  Also, schedule member types for
	canonicalization once they've been added to their scope.
	(build_class_tdecl): Schedule the pattern of the class template
	for canonicalization once it has been added to its scope.  I am
	not sure I should do this, as the pattern is not yet a real type,
	but I am taking my bet.
	(build_type_composition): Schedule the composed type for
	canonicalization once it's been added to its scope.
	(handle_type_decl, handle_qualified_type_decl)
	(handle_pointer_type_def, handle_reference_type_def)
	(handle_function_type, handle_array_type_def)
	(handle_enum_type_decl, handle_typedef_decl, handle_class_decl):
	At this point, we should know if the type is to be added to a
	scope or not.  If it's in a scope, then schedule for
	canonicalization.

Signed-off-by: Dodji Seketeli <dodji@redhat.com>
2015-10-17 16:06:15 +02:00
doc Fix minor warnings when building documentation. 2015-10-05 09:27:16 +02:00
include Misc style cleanup 2015-10-15 13:50:56 +02:00
m4 Delete ltsugar.m4 and pkg.m4 files from m4/ 2015-01-06 09:54:45 +01:00
scripts Initial DOT work. 2013-07-23 23:13:55 +02:00
src Don't canonicalize types not added to their context in abixml reader 2015-10-17 16:06:15 +02:00
tests Bug 19092 - abidw aborts on types that violate the ODR 2015-10-15 16:22:14 +02:00
tools Make abidw --abidiff not show definitely harmless changes 2015-10-15 13:50:49 +02:00
.gitignore Update .gitignore 2014-11-01 12:10:06 +01:00
abigail.m4 For usage from within GCC set header path to $includedir/libabigail 2013-08-14 16:10:15 +02:00
AUTHORS Initial AUTHORS and README 2013-02-28 13:25:20 +01:00
ChangeLog Update ChangeLog file 2015-06-25 08:13:21 +02:00
COMMIT-LOG-GUIDELINES Allow introductory text in commit log and ignore it when generating ChangeLog 2014-11-18 23:18:06 +01:00
COMPILING Encourage people to use autoreconf -i 2015-10-01 10:40:51 +02:00
config.h.in Make abipkgdiff compare tar archives containing binaries 2015-08-22 14:32:20 +02:00
configure.ac Fix activation of Debian package support 2015-10-15 13:50:56 +02:00
CONTRIBUTING Update the CONTRIBUTING file 2015-03-19 12:47:59 +01:00
COPYING Use a better wording for the COPYING file 2015-04-22 09:53:18 +02:00
COPYING-GPLV3 Update licence texts 2015-04-20 13:51:21 +02:00
COPYING-LGPLV2 Initial import of gen-changelog.py 2014-11-18 23:18:06 +01:00
COPYING-LGPLV3 LGPLv3 License the library 2013-07-23 23:13:55 +02:00
gen-changelog.py [gen-changelog] Make subject line always come first 2014-11-18 23:18:06 +01:00
install-sh Add missing autoconfiscation files into version control 2013-03-01 00:47:49 +01:00
libabigail.pc.in Make libxml2 a private dependency wrt pkconfig 2013-08-22 17:41:29 +02:00
ltmain.sh Add missing autoconfiscation files into version control 2013-03-01 00:47:49 +01:00
Makefile.am Update licence texts 2015-04-20 13:51:21 +02:00
README Fix wording in README 2015-09-05 10:30:00 +02:00

This is the Application Binary Interface Generic Analysis and
Instrumentation Library.

It aims at constructing, manipulating, serializing and de-serializing
ABI-relevant artifacts.

The set of artifacts that we are intersted is made of quantities like
types, variable, fonctions and declarations of a given library or
program.  For a given library or program this set of quantities is
called an ABI corpus.

This library aims at (among other things) providing a way to compare
two ABI Corpora (apparently the plural of corpus is copora, heh,
that's cool), provide detailed information about their differences,
and help build tools to infer interesting conclusions about these
differences.

You are welcome to contribute to this project after reading the files
CONTRIBUTING and COMMIT-LOG-GUIDELINES files in the source tree.

Communicating with the maintainers of this project -- including
sending patches to be include to the source code -- happens via email
at libabigail@sourceware.org.