[1/4] Add XML reader test for incomplete function types.
Commit Message
This commit illustrates a bug caused by early caching of type names.
* tests/data/Makefile.am: Add new test files.
* tests/data/test-abidiff-exit/test-fun-param-v0.c: New test.
* tests/data/test-abidiff-exit/test-fun-param-v0.o: Ditto.
* tests/data/test-abidiff-exit/test-fun-param-v0.abi: Ditto.
* tests/data/test-abidiff-exit/test-fun-param-v1.c: Ditto.
* tests/data/test-abidiff-exit/test-fun-param-v1.o: Ditto.
* tests/data/test-abidiff-exit/test-fun-param-v1.abi: Ditto.
* tests/data/test-abidiff-exit/test-fun-param-report.txt: New
test report showing incorrect type "void ()*:.
* tests/test-abidiff-exit.cc: Run new test case.
Signed-off-by: Giuliano Procida <gprocida@google.com>
---
tests/data/Makefile.am | 7 +++
.../test-fun-param-report.txt | 15 ++++++
.../test-abidiff-exit/test-fun-param-v0.abi | 44 +++++++++++++++++
.../test-abidiff-exit/test-fun-param-v0.c | 7 +++
.../test-abidiff-exit/test-fun-param-v0.o | Bin 0 -> 2992 bytes
.../test-abidiff-exit/test-fun-param-v1.abi | 46 ++++++++++++++++++
.../test-abidiff-exit/test-fun-param-v1.c | 7 +++
.../test-abidiff-exit/test-fun-param-v1.o | Bin 0 -> 3000 bytes
tests/test-abidiff-exit.cc | 9 ++++
9 files changed, 135 insertions(+)
create mode 100644 tests/data/test-abidiff-exit/test-fun-param-report.txt
create mode 100644 tests/data/test-abidiff-exit/test-fun-param-v0.abi
create mode 100644 tests/data/test-abidiff-exit/test-fun-param-v0.c
create mode 100644 tests/data/test-abidiff-exit/test-fun-param-v0.o
create mode 100644 tests/data/test-abidiff-exit/test-fun-param-v1.abi
create mode 100644 tests/data/test-abidiff-exit/test-fun-param-v1.c
create mode 100644 tests/data/test-abidiff-exit/test-fun-param-v1.o
Comments
I'd rather not add non-default options for testing as this makes the tests
a little further away from what will usually happen in practice.
I normally have a little one line of script dance to cp the files to /tmp,
cd and compile them there, and copy them back, but I forgot on this
occasion.
Dodji has copied the test cases verbatim, your comments are transportable
to his commit.
Giuliano.
On Tue, 12 May 2020 at 17:22, Matthias Maennich <maennich@google.com> wrote:
> On Tue, May 05, 2020 at 07:06:09PM +0100, Giuliano Procida wrote:
> >This commit illustrates a bug caused by early caching of type names.
> >
> > * tests/data/Makefile.am: Add new test files.
> > * tests/data/test-abidiff-exit/test-fun-param-v0.c: New test.
> > * tests/data/test-abidiff-exit/test-fun-param-v0.o: Ditto.
> > * tests/data/test-abidiff-exit/test-fun-param-v0.abi: Ditto.
> > * tests/data/test-abidiff-exit/test-fun-param-v1.c: Ditto.
> > * tests/data/test-abidiff-exit/test-fun-param-v1.o: Ditto.
> > * tests/data/test-abidiff-exit/test-fun-param-v1.abi: Ditto.
> > * tests/data/test-abidiff-exit/test-fun-param-report.txt: New
> > test report showing incorrect type "void ()*:.
> > * tests/test-abidiff-exit.cc: Run new test case.
> >
> >Signed-off-by: Giuliano Procida <gprocida@google.com>
> >---
> > tests/data/Makefile.am | 7 +++
> > .../test-fun-param-report.txt | 15 ++++++
> > .../test-abidiff-exit/test-fun-param-v0.abi | 44 +++++++++++++++++
> > .../test-abidiff-exit/test-fun-param-v0.c | 7 +++
> > .../test-abidiff-exit/test-fun-param-v0.o | Bin 0 -> 2992 bytes
> > .../test-abidiff-exit/test-fun-param-v1.abi | 46 ++++++++++++++++++
> > .../test-abidiff-exit/test-fun-param-v1.c | 7 +++
> > .../test-abidiff-exit/test-fun-param-v1.o | Bin 0 -> 3000 bytes
> > tests/test-abidiff-exit.cc | 9 ++++
> > 9 files changed, 135 insertions(+)
> > create mode 100644 tests/data/test-abidiff-exit/test-fun-param-report.txt
> > create mode 100644 tests/data/test-abidiff-exit/test-fun-param-v0.abi
> > create mode 100644 tests/data/test-abidiff-exit/test-fun-param-v0.c
> > create mode 100644 tests/data/test-abidiff-exit/test-fun-param-v0.o
> > create mode 100644 tests/data/test-abidiff-exit/test-fun-param-v1.abi
> > create mode 100644 tests/data/test-abidiff-exit/test-fun-param-v1.c
> > create mode 100644 tests/data/test-abidiff-exit/test-fun-param-v1.o
> >
> >diff --git a/tests/data/Makefile.am b/tests/data/Makefile.am
> >index a1b9bf64..461d9481 100644
> >--- a/tests/data/Makefile.am
> >+++ b/tests/data/Makefile.am
> >@@ -151,6 +151,13 @@ test-abidiff-exit/test-decl-struct-v0.o \
> > test-abidiff-exit/test-decl-struct-v1.c \
> > test-abidiff-exit/test-decl-struct-v1.o \
> > test-abidiff-exit/test-decl-struct-report.txt \
> >+test-abidiff-exit/test-fun-param-v0.c \
> >+test-abidiff-exit/test-fun-param-v0.o \
> >+test-abidiff-exit/test-fun-param-v0.abi \
> >+test-abidiff-exit/test-fun-param-v1.c \
> >+test-abidiff-exit/test-fun-param-v1.o \
> >+test-abidiff-exit/test-fun-param-v1.abi \
> >+test-abidiff-exit/test-fun-param-report.txt \
> > \
> > test-diff-dwarf/test0-v0.cc \
> > test-diff-dwarf/test0-v0.o \
> >diff --git a/tests/data/test-abidiff-exit/test-fun-param-report.txt
> b/tests/data/test-abidiff-exit/test-fun-param-report.txt
> >new file mode 100644
> >index 00000000..6bfbcf0d
> >--- /dev/null
> >+++ b/tests/data/test-abidiff-exit/test-fun-param-report.txt
> >@@ -0,0 +1,15 @@
> >+Functions changes summary: 0 Removed, 1 Changed, 0 Added function
> >+Variables changes summary: 0 Removed, 0 Changed, 0 Added variable
> >+
> >+1 function with some indirect sub-type change:
> >+
> >+ [C] 'function void reg(ops*)' at test-fun-param-v1.c:7:1 has some
> indirect sub-type changes:
> >+ parameter 1 of type 'ops*' has sub-type changes:
> >+ in pointed to type 'struct ops' at test-fun-param-v1.c:1:1:
> >+ type size hasn't changed
> >+ 1 data member change:
> >+ type of 'void ()* ops::bind_class' changed:
> >+ in pointed to type 'function type void (void*, unsigned int,
> unsigned long int)':
> >+ parameter 4 of type 'void*' was added
> >+ parameter 5 of type 'unsigned long int' was added
> >+
> >diff --git a/tests/data/test-abidiff-exit/test-fun-param-v0.abi
> b/tests/data/test-abidiff-exit/test-fun-param-v0.abi
>
> You might want to create those with --no-show-locs or --short-locs and
> --no-comp-dir-path to avoid too much friction when regenerating them at
> some point.
>
> Looks otherwise good to me.
>
> Reviewed-by: Matthias Maennich <maennich@google.com>
>
> Cheers,
> Matthias
>
> >new file mode 100644
> >index 00000000..816f74c8
> >--- /dev/null
> >+++ b/tests/data/test-abidiff-exit/test-fun-param-v0.abi
> >@@ -0,0 +1,44 @@
> >+<abi-corpus path='test-fun-param-v0.o' architecture='elf-amd-x86_64'>
> >+ <elf-function-symbols>
> >+ <elf-symbol name='reg' type='func-type' binding='global-binding'
> visibility='default-visibility' is-defined='yes'/>
> >+ </elf-function-symbols>
> >+ <abi-instr version='1.0' address-size='64' path='test-fun-param-v0.c'
> comp-dir-path='/usr/local/google/home/gprocida/dev/libabigail'
> language='LANG_C99'>
> >+ <type-decl name='int' size-in-bits='32' id='type-id-1'/>
> >+ <type-decl name='unsigned int' size-in-bits='32' id='type-id-2'/>
> >+ <type-decl name='unsigned long int' size-in-bits='64'
> id='type-id-3'/>
> >+ <type-decl name='void' id='type-id-4'/>
> >+ <class-decl name='ops' size-in-bits='192' is-struct='yes'
> visibility='default'
> filepath='/usr/local/google/home/gprocida/dev/libabigail/test-fun-param-v0.c'
> line='1' column='1' id='type-id-5'>
> >+ <data-member access='public' layout-offset-in-bits='0'>
> >+ <var-decl name='foo' type-id='type-id-6' visibility='default'
> filepath='/usr/local/google/home/gprocida/dev/libabigail/test-fun-param-v0.c'
> line='2' column='1'/>
> >+ </data-member>
> >+ <data-member access='public' layout-offset-in-bits='64'>
> >+ <var-decl name='bind_class' type-id='type-id-7'
> visibility='default'
> filepath='/usr/local/google/home/gprocida/dev/libabigail/test-fun-param-v0.c'
> line='3' column='1'/>
> >+ </data-member>
> >+ <data-member access='public' layout-offset-in-bits='128'>
> >+ <var-decl name='bar' type-id='type-id-8' visibility='default'
> filepath='/usr/local/google/home/gprocida/dev/libabigail/test-fun-param-v0.c'
> line='4' column='1'/>
> >+ </data-member>
> >+ </class-decl>
> >+ <pointer-type-def type-id='type-id-9' size-in-bits='64'
> id='type-id-8'/>
> >+ <pointer-type-def type-id='type-id-5' size-in-bits='64'
> id='type-id-10'/>
> >+ <pointer-type-def type-id='type-id-11' size-in-bits='64'
> id='type-id-6'/>
> >+ <pointer-type-def type-id='type-id-12' size-in-bits='64'
> id='type-id-7'/>
> >+ <pointer-type-def type-id='type-id-4' size-in-bits='64'
> id='type-id-13'/>
> >+ <function-decl name='reg' mangled-name='reg'
> filepath='/usr/local/google/home/gprocida/dev/libabigail/test-fun-param-v0.c'
> line='7' column='1' visibility='default' binding='global' size-in-bits='64'
> elf-symbol-id='reg'>
> >+ <parameter type-id='type-id-10' name='o'
> filepath='/usr/local/google/home/gprocida/dev/libabigail/test-fun-param-v0.c'
> line='7' column='1'/>
> >+ <return type-id='type-id-4'/>
> >+ </function-decl>
> >+ <function-type size-in-bits='64' id='type-id-9'>
> >+ <parameter type-id='type-id-1'/>
> >+ <return type-id='type-id-1'/>
> >+ </function-type>
> >+ <function-type size-in-bits='64' id='type-id-11'>
> >+ <return type-id='type-id-4'/>
> >+ </function-type>
> >+ <function-type size-in-bits='64' id='type-id-12'>
> >+ <parameter type-id='type-id-13'/>
> >+ <parameter type-id='type-id-2'/>
> >+ <parameter type-id='type-id-3'/>
> >+ <return type-id='type-id-4'/>
> >+ </function-type>
> >+ </abi-instr>
> >+</abi-corpus>
> >diff --git a/tests/data/test-abidiff-exit/test-fun-param-v0.c
> b/tests/data/test-abidiff-exit/test-fun-param-v0.c
> >new file mode 100644
> >index 00000000..aa1198c9
> >--- /dev/null
> >+++ b/tests/data/test-abidiff-exit/test-fun-param-v0.c
> >@@ -0,0 +1,7 @@
> >+struct ops {
> >+ void(*foo)(void);
> >+ void(*bind_class)(void *, unsigned int, unsigned long);
> >+ int(*bar)(int);
> >+};
> >+
> >+void reg(struct ops* o) { (void)o; }
> >diff --git a/tests/data/test-abidiff-exit/test-fun-param-v0.o
> b/tests/data/test-abidiff-exit/test-fun-param-v0.o
> >new file mode 100644
> >index
> 0000000000000000000000000000000000000000..64218730b3fa188f61752ebbc917f49a75a92785
> >GIT binary patch
> >literal 2992
> >zcmbtW&2QsW5T6(4!>OBW+E7R+5=LTG7GWnXXlWO92^6|5yINI9dqkC;IF3bPSGH5S
> >zAU*^LSPp2BkPs3l_J+ir0~f?U!2yW_LPDID+e#c@#(ppByt)?{HSf**X6DVu`*7cV
> >z`Py!QF%ZPyGTfI03UIf4pYJ7X51OzHH}-D*zIW^Gd$(Wv=~sk{iAqgYSWNiLpk??%
> >za1=p{G1W#;83qBcLbXo@$r4PdeuliN*j5OvsD6t=14`w@yz&mIlHon#KE?s6>O!$X
> >z%z~OsWz|DLyMqJ$R2pEhSn~WB%IX&=)I!GvR+$wh(qmu$g4#M}RC$oN!sjFOFpvYb
> >z#Lm~7no?h_FR|rH;~~^GnWAdiCG9zFOJhwerUr_diu=t?T(pQlJqwgpV66>MJ_nk%
> >zj~<m3w$>(BwFD$rNr8ntj?-lfhGme&ev@n#IjUj-CVRduVy(3)qh9OF7n7yxrA!uu
> >z7UupGl|n@Tx@Jg}oq-Z|7e@u2#F4ST>opvcV}e`DAa<hI7*2iT$O^5AaojbNt%Fh<
> >zs%Z>#Yn7JXFDU3Y^&`*qoq<lh9|yjx&mo;@6n4fz-x_z^AaKV{XB14Fj(ZdaeQ#iO
> >z2F`J3?Aey>xt2GEE7x!6JL}KtTjqwju5WZVy7>3BZcO5-?`*q{?}T0-MJw!&wof)M
> >z8W*3@4OcgYR&>+vkHWwYrjarA-|+l_5nJ}yiNHqwus^n<D8IBTJ3E*3Cth-F&+^m2
> >z#>VCaDTSnK4<sY@=*?Gwoiy0$Vnw};J$nRk`Vl1^f1%#^sIXHj@1j8p=Z<ufityJz
> >zc}nbU9*ny-+k-j1f|@*1__dXF3e4`toJxV@hRtClC{R6xrFi}sQ=oQ+Js$ZSQsC5+
> >z0xM{@oaw_XQr;1z3(rYZwt%wWNhKl>PSso|5NRo$K;YkTnc@=({Lxedyx$4Y4rO=a
> >z0>{ZdyYG7$oZ^1N<qssBi}0z0i%x#eaXGH2k>ZxbA~-kBu-`fZ*Evo#W$OYnx;eqy
> >zgmWCG^GI;9a}t9&uwn~L8?TrdI%CTmIQG;%^!#Cfx`elEJ9Lic)cCykE?&^A%h>ZB
> >z;esK+><5#HgHMa;2eD(~`(Q+|)qkBkIitfNK2i=({C`fX=uf>B{S?dfI5RtcT$XR>
> >zV~7(b-^8ojUY=zCH8h}e^I!ef(N|uRVv6{`k&q$TmcAnNh3;i+h`pD7`Qa|d>0A*c
> >z&NzL6h_>-3uSvMc!5>J-kZgN^IvFGLKRMXV_!2AIQk{AE|G_VX@TdIgm6P)y<gAGh
> >zJj^e{D<ot{j(>={y!b7CphTZ2KD`5S{3FC@O_3+E2@QDs9|gc?5ns%2A)e=do*yVW
> >zUs)1<V*U`7g3sDrlMf_U%C=u||GBpVu><bEnOzilQNMucAGf^zb#wYhUlHLi`bzo8
> >vv1#p3c>DvNFunKmrpo@bCwZm*Oi3Y$cR!U*_lnld^WWq7-w}>{mizZFd^q39
> >
> >literal 0
> >HcmV?d00001
> >
> >diff --git a/tests/data/test-abidiff-exit/test-fun-param-v1.abi
> b/tests/data/test-abidiff-exit/test-fun-param-v1.abi
> >new file mode 100644
> >index 00000000..dcc91d19
> >--- /dev/null
> >+++ b/tests/data/test-abidiff-exit/test-fun-param-v1.abi
> >@@ -0,0 +1,46 @@
> >+<abi-corpus path='test-fun-param-v1.o' architecture='elf-amd-x86_64'>
> >+ <elf-function-symbols>
> >+ <elf-symbol name='reg' type='func-type' binding='global-binding'
> visibility='default-visibility' is-defined='yes'/>
> >+ </elf-function-symbols>
> >+ <abi-instr version='1.0' address-size='64' path='test-fun-param-v1.c'
> comp-dir-path='/usr/local/google/home/gprocida/dev/libabigail'
> language='LANG_C99'>
> >+ <type-decl name='int' size-in-bits='32' id='type-id-1'/>
> >+ <type-decl name='unsigned int' size-in-bits='32' id='type-id-2'/>
> >+ <type-decl name='unsigned long int' size-in-bits='64'
> id='type-id-3'/>
> >+ <type-decl name='void' id='type-id-4'/>
> >+ <class-decl name='ops' size-in-bits='192' is-struct='yes'
> visibility='default'
> filepath='/usr/local/google/home/gprocida/dev/libabigail/test-fun-param-v1.c'
> line='1' column='1' id='type-id-5'>
> >+ <data-member access='public' layout-offset-in-bits='0'>
> >+ <var-decl name='foo' type-id='type-id-6' visibility='default'
> filepath='/usr/local/google/home/gprocida/dev/libabigail/test-fun-param-v1.c'
> line='2' column='1'/>
> >+ </data-member>
> >+ <data-member access='public' layout-offset-in-bits='64'>
> >+ <var-decl name='bind_class' type-id='type-id-7'
> visibility='default'
> filepath='/usr/local/google/home/gprocida/dev/libabigail/test-fun-param-v1.c'
> line='3' column='1'/>
> >+ </data-member>
> >+ <data-member access='public' layout-offset-in-bits='128'>
> >+ <var-decl name='bar' type-id='type-id-8' visibility='default'
> filepath='/usr/local/google/home/gprocida/dev/libabigail/test-fun-param-v1.c'
> line='4' column='1'/>
> >+ </data-member>
> >+ </class-decl>
> >+ <pointer-type-def type-id='type-id-9' size-in-bits='64'
> id='type-id-8'/>
> >+ <pointer-type-def type-id='type-id-5' size-in-bits='64'
> id='type-id-10'/>
> >+ <pointer-type-def type-id='type-id-11' size-in-bits='64'
> id='type-id-6'/>
> >+ <pointer-type-def type-id='type-id-12' size-in-bits='64'
> id='type-id-7'/>
> >+ <pointer-type-def type-id='type-id-4' size-in-bits='64'
> id='type-id-13'/>
> >+ <function-decl name='reg' mangled-name='reg'
> filepath='/usr/local/google/home/gprocida/dev/libabigail/test-fun-param-v1.c'
> line='7' column='1' visibility='default' binding='global' size-in-bits='64'
> elf-symbol-id='reg'>
> >+ <parameter type-id='type-id-10' name='o'
> filepath='/usr/local/google/home/gprocida/dev/libabigail/test-fun-param-v1.c'
> line='7' column='1'/>
> >+ <return type-id='type-id-4'/>
> >+ </function-decl>
> >+ <function-type size-in-bits='64' id='type-id-9'>
> >+ <parameter type-id='type-id-1'/>
> >+ <return type-id='type-id-1'/>
> >+ </function-type>
> >+ <function-type size-in-bits='64' id='type-id-11'>
> >+ <return type-id='type-id-4'/>
> >+ </function-type>
> >+ <function-type size-in-bits='64' id='type-id-12'>
> >+ <parameter type-id='type-id-13'/>
> >+ <parameter type-id='type-id-2'/>
> >+ <parameter type-id='type-id-3'/>
> >+ <parameter type-id='type-id-13'/>
> >+ <parameter type-id='type-id-3'/>
> >+ <return type-id='type-id-4'/>
> >+ </function-type>
> >+ </abi-instr>
> >+</abi-corpus>
> >diff --git a/tests/data/test-abidiff-exit/test-fun-param-v1.c
> b/tests/data/test-abidiff-exit/test-fun-param-v1.c
> >new file mode 100644
> >index 00000000..e47f49cc
> >--- /dev/null
> >+++ b/tests/data/test-abidiff-exit/test-fun-param-v1.c
> >@@ -0,0 +1,7 @@
> >+struct ops {
> >+ void(*foo)(void);
> >+ void(*bind_class)(void *, unsigned int, unsigned long, void *,
> unsigned long);
> >+ int(*bar)(int);
> >+};
> >+
> >+void reg(struct ops* o) { (void) o; }
> >diff --git a/tests/data/test-abidiff-exit/test-fun-param-v1.o
> b/tests/data/test-abidiff-exit/test-fun-param-v1.o
> >new file mode 100644
> >index
> 0000000000000000000000000000000000000000..c84e4f0fe209d872c2309acefceba2cce51a998f
> >GIT binary patch
> >literal 3000
> >zcmbtV-D@LN6hAkUk4dMAX=Amef+MWd6=%{`S<{uS(Q3EVWhugnFH&Zb$z(8@DKnGW
> >zRYVXGR}i`&s31P*vu{57qW&YkxZs1Zf)5KmxaUmn&EDKjU-XdNd(Q8ibI-^9m=9mQ
> >zwp(Bf1TnY*4<vyC+$%reI~m)7CM?2@y<5NU-TL6(>D#~lfp9TX>DdbN87~cn#22EY
> >z1eO`oT?Dm$6agz#yJV0p!L;gE$m^Qx#K4OBk0>;tRL;yRpOPvYJ|ph-R3r|n`dqO>
> >z%$%N0Wj#Q__yGs{>omZ8u@r<Ul=W{>sKuTStTHW8B+9<IgW5XgR(XWD!tDWiSjYie
> >zU{BVYhE`v#FR;Z*<5AQ$nWh`YW#a{7%V13`s|K1r5%-&IT(pQlT?R@^u(kqFeh3U>
> >zA3Z8dY;A>H^%9U=B?T680jDb%49g&k{U+JWb5zFyZ1&=ch_$vt8FiMwd^uaHUXrpX
> >zEMxA^P$^UdpsPfpYzfNPT^u!d8b`+dsn>AK4h(KGgVak>t3M8{BPVu7*71g&Z6cIb
> >zpgM_xZp)>Gj|v+4jl(4HL$7C2?}t(7n=?pjoW!kR)OCg}KZ^XJ*BV44ujL=bQ8(y0
> >zt)6$>8V0W82EG#v;p+7p=FZ0R=9ax_Z<w3wo9p;{*0e_HIP|uCFZAM|i=q>E2iqs@
> >zOV*|5Ov^W|zLVSxyMs6iqj6%5!*_$QXQhri^b&B9KkN>jB*`!B>dww(^Ql)nH*ms9
> >zU~98|QAq(yei;8m?7cUDoiy0$d__OSjy;AL{fV-Ezf^C0QrM}LchO)1=Z<uvityLJ
> >zc}nbT9*lc7-GLdshMGLm`1MtF8cc7-j7o#-e$8McXiz<aP4N5^ra|o-dpz(tq`{e|
> >z1(wimQR>4qQr-cj>&{73Hixp{NhKl>PSso|5NTmDfxxrJ1Tl(FB=E;4BH-=Lh;~Tc
> >zjf)&7dwJjYB%I=Y$K}rzoQv><f{RZ6!f`dOsFC89#3DF1&avM*2RAuRHOX~>o!lJZ
> >zUBWqyC-XpXsdtis-E&e0Y!@$>9eYE^?s@LmKMcZtgu0A(TsQWPXVmz(gg#zR*<~1n
> >zo^ZhsV0WX@$is)l4x`kw@pZ70)aky%oxH(eAD<|XC;mUDRrIIcihhdaI-HrFKQ5~`
> >z^a;cXQ*Ywy++Lkj|1~tAbMs&QH_%sIlVXbaf07`PYD?b``cii!n~dd$>MqCWT#=nP
> >z<MjO@+Qz@SCgE)k{zQUAs_g;lRE*63=HR;IORQ>3b>`)Nm*+41DSvw9)ckunYa#>}
> >z_+@yF1c}u6hp5YoZ}I~r`b6>R9Z=&RAx3M8Jdw>P<nezN0G~yCF~5&^o_~uUC^}y<
> >z2|qD^j7q`Fc5kW&k}Fl)uetxs+kx0y+`la^ioB>_!1V6r^{<`NKl+LYf6-UUM~zKu
> >spYr$zJYjn8=}lGrX;1P>{f&}B67T**I@>E+H_!io=l{KM<g?np`#%ohBme*a
> >
> >literal 0
> >HcmV?d00001
> >
> >diff --git a/tests/test-abidiff-exit.cc b/tests/test-abidiff-exit.cc
> >index 5afc15bc..4d9c1943 100644
> >--- a/tests/test-abidiff-exit.cc
> >+++ b/tests/test-abidiff-exit.cc
> >@@ -203,6 +203,15 @@ InOutSpec in_out_specs[] =
> > "data/test-abidiff-exit/test-decl-struct-report.txt",
> > "output/test-abidiff-exit/test-decl-struct-report.txt"
> > },
> >+ {
> >+ "data/test-abidiff-exit/test-fun-param-v0.abi",
> >+ "data/test-abidiff-exit/test-fun-param-v1.abi",
> >+ "",
> >+ "",
> >+ abigail::tools_utils::ABIDIFF_ABI_CHANGE,
> >+ "data/test-abidiff-exit/test-fun-param-report.txt",
> >+ "output/test-abidiff-exit/test-fun-param-report.txt"
> >+ },
> > {0, 0, 0 ,0, abigail::tools_utils::ABIDIFF_OK, 0, 0}
> > };
> >
> >--
> >2.26.2.526.g744177e7f7-goog
> >
>
@@ -151,6 +151,13 @@ test-abidiff-exit/test-decl-struct-v0.o \
test-abidiff-exit/test-decl-struct-v1.c \
test-abidiff-exit/test-decl-struct-v1.o \
test-abidiff-exit/test-decl-struct-report.txt \
+test-abidiff-exit/test-fun-param-v0.c \
+test-abidiff-exit/test-fun-param-v0.o \
+test-abidiff-exit/test-fun-param-v0.abi \
+test-abidiff-exit/test-fun-param-v1.c \
+test-abidiff-exit/test-fun-param-v1.o \
+test-abidiff-exit/test-fun-param-v1.abi \
+test-abidiff-exit/test-fun-param-report.txt \
\
test-diff-dwarf/test0-v0.cc \
test-diff-dwarf/test0-v0.o \
new file mode 100644
@@ -0,0 +1,15 @@
+Functions changes summary: 0 Removed, 1 Changed, 0 Added function
+Variables changes summary: 0 Removed, 0 Changed, 0 Added variable
+
+1 function with some indirect sub-type change:
+
+ [C] 'function void reg(ops*)' at test-fun-param-v1.c:7:1 has some indirect sub-type changes:
+ parameter 1 of type 'ops*' has sub-type changes:
+ in pointed to type 'struct ops' at test-fun-param-v1.c:1:1:
+ type size hasn't changed
+ 1 data member change:
+ type of 'void ()* ops::bind_class' changed:
+ in pointed to type 'function type void (void*, unsigned int, unsigned long int)':
+ parameter 4 of type 'void*' was added
+ parameter 5 of type 'unsigned long int' was added
+
new file mode 100644
@@ -0,0 +1,44 @@
+<abi-corpus path='test-fun-param-v0.o' architecture='elf-amd-x86_64'>
+ <elf-function-symbols>
+ <elf-symbol name='reg' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+ </elf-function-symbols>
+ <abi-instr version='1.0' address-size='64' path='test-fun-param-v0.c' comp-dir-path='/usr/local/google/home/gprocida/dev/libabigail' language='LANG_C99'>
+ <type-decl name='int' size-in-bits='32' id='type-id-1'/>
+ <type-decl name='unsigned int' size-in-bits='32' id='type-id-2'/>
+ <type-decl name='unsigned long int' size-in-bits='64' id='type-id-3'/>
+ <type-decl name='void' id='type-id-4'/>
+ <class-decl name='ops' size-in-bits='192' is-struct='yes' visibility='default' filepath='/usr/local/google/home/gprocida/dev/libabigail/test-fun-param-v0.c' line='1' column='1' id='type-id-5'>
+ <data-member access='public' layout-offset-in-bits='0'>
+ <var-decl name='foo' type-id='type-id-6' visibility='default' filepath='/usr/local/google/home/gprocida/dev/libabigail/test-fun-param-v0.c' line='2' column='1'/>
+ </data-member>
+ <data-member access='public' layout-offset-in-bits='64'>
+ <var-decl name='bind_class' type-id='type-id-7' visibility='default' filepath='/usr/local/google/home/gprocida/dev/libabigail/test-fun-param-v0.c' line='3' column='1'/>
+ </data-member>
+ <data-member access='public' layout-offset-in-bits='128'>
+ <var-decl name='bar' type-id='type-id-8' visibility='default' filepath='/usr/local/google/home/gprocida/dev/libabigail/test-fun-param-v0.c' line='4' column='1'/>
+ </data-member>
+ </class-decl>
+ <pointer-type-def type-id='type-id-9' size-in-bits='64' id='type-id-8'/>
+ <pointer-type-def type-id='type-id-5' size-in-bits='64' id='type-id-10'/>
+ <pointer-type-def type-id='type-id-11' size-in-bits='64' id='type-id-6'/>
+ <pointer-type-def type-id='type-id-12' size-in-bits='64' id='type-id-7'/>
+ <pointer-type-def type-id='type-id-4' size-in-bits='64' id='type-id-13'/>
+ <function-decl name='reg' mangled-name='reg' filepath='/usr/local/google/home/gprocida/dev/libabigail/test-fun-param-v0.c' line='7' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='reg'>
+ <parameter type-id='type-id-10' name='o' filepath='/usr/local/google/home/gprocida/dev/libabigail/test-fun-param-v0.c' line='7' column='1'/>
+ <return type-id='type-id-4'/>
+ </function-decl>
+ <function-type size-in-bits='64' id='type-id-9'>
+ <parameter type-id='type-id-1'/>
+ <return type-id='type-id-1'/>
+ </function-type>
+ <function-type size-in-bits='64' id='type-id-11'>
+ <return type-id='type-id-4'/>
+ </function-type>
+ <function-type size-in-bits='64' id='type-id-12'>
+ <parameter type-id='type-id-13'/>
+ <parameter type-id='type-id-2'/>
+ <parameter type-id='type-id-3'/>
+ <return type-id='type-id-4'/>
+ </function-type>
+ </abi-instr>
+</abi-corpus>
new file mode 100644
@@ -0,0 +1,7 @@
+struct ops {
+ void(*foo)(void);
+ void(*bind_class)(void *, unsigned int, unsigned long);
+ int(*bar)(int);
+};
+
+void reg(struct ops* o) { (void)o; }
new file mode 100644
GIT binary patch
literal 2992
zcmbtW&2QsW5T6(4!>OBW+E7R+5=LTG7GWnXXlWO92^6|5yINI9dqkC;IF3bPSGH5S
zAU*^LSPp2BkPs3l_J+ir0~f?U!2yW_LPDID+e#c@#(ppByt)?{HSf**X6DVu`*7cV
z`Py!QF%ZPyGTfI03UIf4pYJ7X51OzHH}-D*zIW^Gd$(Wv=~sk{iAqgYSWNiLpk??%
za1=p{G1W#;83qBcLbXo@$r4PdeuliN*j5OvsD6t=14`w@yz&mIlHon#KE?s6>O!$X
z%z~OsWz|DLyMqJ$R2pEhSn~WB%IX&=)I!GvR+$wh(qmu$g4#M}RC$oN!sjFOFpvYb
z#Lm~7no?h_FR|rH;~~^GnWAdiCG9zFOJhwerUr_diu=t?T(pQlJqwgpV66>MJ_nk%
zj~<m3w$>(BwFD$rNr8ntj?-lfhGme&ev@n#IjUj-CVRduVy(3)qh9OF7n7yxrA!uu
z7UupGl|n@Tx@Jg}oq-Z|7e@u2#F4ST>opvcV}e`DAa<hI7*2iT$O^5AaojbNt%Fh<
zs%Z>#Yn7JXFDU3Y^&`*qoq<lh9|yjx&mo;@6n4fz-x_z^AaKV{XB14Fj(ZdaeQ#iO
z2F`J3?Aey>xt2GEE7x!6JL}KtTjqwju5WZVy7>3BZcO5-?`*q{?}T0-MJw!&wof)M
z8W*3@4OcgYR&>+vkHWwYrjarA-|+l_5nJ}yiNHqwus^n<D8IBTJ3E*3Cth-F&+^m2
z#>VCaDTSnK4<sY@=*?Gwoiy0$Vnw};J$nRk`Vl1^f1%#^sIXHj@1j8p=Z<ufityJz
zc}nbU9*ny-+k-j1f|@*1__dXF3e4`toJxV@hRtClC{R6xrFi}sQ=oQ+Js$ZSQsC5+
z0xM{@oaw_XQr;1z3(rYZwt%wWNhKl>PSso|5NRo$K;YkTnc@=({Lxedyx$4Y4rO=a
z0>{ZdyYG7$oZ^1N<qssBi}0z0i%x#eaXGH2k>ZxbA~-kBu-`fZ*Evo#W$OYnx;eqy
zgmWCG^GI;9a}t9&uwn~L8?TrdI%CTmIQG;%^!#Cfx`elEJ9Lic)cCykE?&^A%h>ZB
z;esK+><5#HgHMa;2eD(~`(Q+|)qkBkIitfNK2i=({C`fX=uf>B{S?dfI5RtcT$XR>
zV~7(b-^8ojUY=zCH8h}e^I!ef(N|uRVv6{`k&q$TmcAnNh3;i+h`pD7`Qa|d>0A*c
z&NzL6h_>-3uSvMc!5>J-kZgN^IvFGLKRMXV_!2AIQk{AE|G_VX@TdIgm6P)y<gAGh
zJj^e{D<ot{j(>={y!b7CphTZ2KD`5S{3FC@O_3+E2@QDs9|gc?5ns%2A)e=do*yVW
zUs)1<V*U`7g3sDrlMf_U%C=u||GBpVu><bEnOzilQNMucAGf^zb#wYhUlHLi`bzo8
vv1#p3c>DvNFunKmrpo@bCwZm*Oi3Y$cR!U*_lnld^WWq7-w}>{mizZFd^q39
literal 0
HcmV?d00001
new file mode 100644
@@ -0,0 +1,46 @@
+<abi-corpus path='test-fun-param-v1.o' architecture='elf-amd-x86_64'>
+ <elf-function-symbols>
+ <elf-symbol name='reg' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+ </elf-function-symbols>
+ <abi-instr version='1.0' address-size='64' path='test-fun-param-v1.c' comp-dir-path='/usr/local/google/home/gprocida/dev/libabigail' language='LANG_C99'>
+ <type-decl name='int' size-in-bits='32' id='type-id-1'/>
+ <type-decl name='unsigned int' size-in-bits='32' id='type-id-2'/>
+ <type-decl name='unsigned long int' size-in-bits='64' id='type-id-3'/>
+ <type-decl name='void' id='type-id-4'/>
+ <class-decl name='ops' size-in-bits='192' is-struct='yes' visibility='default' filepath='/usr/local/google/home/gprocida/dev/libabigail/test-fun-param-v1.c' line='1' column='1' id='type-id-5'>
+ <data-member access='public' layout-offset-in-bits='0'>
+ <var-decl name='foo' type-id='type-id-6' visibility='default' filepath='/usr/local/google/home/gprocida/dev/libabigail/test-fun-param-v1.c' line='2' column='1'/>
+ </data-member>
+ <data-member access='public' layout-offset-in-bits='64'>
+ <var-decl name='bind_class' type-id='type-id-7' visibility='default' filepath='/usr/local/google/home/gprocida/dev/libabigail/test-fun-param-v1.c' line='3' column='1'/>
+ </data-member>
+ <data-member access='public' layout-offset-in-bits='128'>
+ <var-decl name='bar' type-id='type-id-8' visibility='default' filepath='/usr/local/google/home/gprocida/dev/libabigail/test-fun-param-v1.c' line='4' column='1'/>
+ </data-member>
+ </class-decl>
+ <pointer-type-def type-id='type-id-9' size-in-bits='64' id='type-id-8'/>
+ <pointer-type-def type-id='type-id-5' size-in-bits='64' id='type-id-10'/>
+ <pointer-type-def type-id='type-id-11' size-in-bits='64' id='type-id-6'/>
+ <pointer-type-def type-id='type-id-12' size-in-bits='64' id='type-id-7'/>
+ <pointer-type-def type-id='type-id-4' size-in-bits='64' id='type-id-13'/>
+ <function-decl name='reg' mangled-name='reg' filepath='/usr/local/google/home/gprocida/dev/libabigail/test-fun-param-v1.c' line='7' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='reg'>
+ <parameter type-id='type-id-10' name='o' filepath='/usr/local/google/home/gprocida/dev/libabigail/test-fun-param-v1.c' line='7' column='1'/>
+ <return type-id='type-id-4'/>
+ </function-decl>
+ <function-type size-in-bits='64' id='type-id-9'>
+ <parameter type-id='type-id-1'/>
+ <return type-id='type-id-1'/>
+ </function-type>
+ <function-type size-in-bits='64' id='type-id-11'>
+ <return type-id='type-id-4'/>
+ </function-type>
+ <function-type size-in-bits='64' id='type-id-12'>
+ <parameter type-id='type-id-13'/>
+ <parameter type-id='type-id-2'/>
+ <parameter type-id='type-id-3'/>
+ <parameter type-id='type-id-13'/>
+ <parameter type-id='type-id-3'/>
+ <return type-id='type-id-4'/>
+ </function-type>
+ </abi-instr>
+</abi-corpus>
new file mode 100644
@@ -0,0 +1,7 @@
+struct ops {
+ void(*foo)(void);
+ void(*bind_class)(void *, unsigned int, unsigned long, void *, unsigned long);
+ int(*bar)(int);
+};
+
+void reg(struct ops* o) { (void) o; }
new file mode 100644
GIT binary patch
literal 3000
zcmbtV-D@LN6hAkUk4dMAX=Amef+MWd6=%{`S<{uS(Q3EVWhugnFH&Zb$z(8@DKnGW
zRYVXGR}i`&s31P*vu{57qW&YkxZs1Zf)5KmxaUmn&EDKjU-XdNd(Q8ibI-^9m=9mQ
zwp(Bf1TnY*4<vyC+$%reI~m)7CM?2@y<5NU-TL6(>D#~lfp9TX>DdbN87~cn#22EY
z1eO`oT?Dm$6agz#yJV0p!L;gE$m^Qx#K4OBk0>;tRL;yRpOPvYJ|ph-R3r|n`dqO>
z%$%N0Wj#Q__yGs{>omZ8u@r<Ul=W{>sKuTStTHW8B+9<IgW5XgR(XWD!tDWiSjYie
zU{BVYhE`v#FR;Z*<5AQ$nWh`YW#a{7%V13`s|K1r5%-&IT(pQlT?R@^u(kqFeh3U>
zA3Z8dY;A>H^%9U=B?T680jDb%49g&k{U+JWb5zFyZ1&=ch_$vt8FiMwd^uaHUXrpX
zEMxA^P$^UdpsPfpYzfNPT^u!d8b`+dsn>AK4h(KGgVak>t3M8{BPVu7*71g&Z6cIb
zpgM_xZp)>Gj|v+4jl(4HL$7C2?}t(7n=?pjoW!kR)OCg}KZ^XJ*BV44ujL=bQ8(y0
zt)6$>8V0W82EG#v;p+7p=FZ0R=9ax_Z<w3wo9p;{*0e_HIP|uCFZAM|i=q>E2iqs@
zOV*|5Ov^W|zLVSxyMs6iqj6%5!*_$QXQhri^b&B9KkN>jB*`!B>dww(^Ql)nH*ms9
zU~98|QAq(yei;8m?7cUDoiy0$d__OSjy;AL{fV-Ezf^C0QrM}LchO)1=Z<uvityLJ
zc}nbT9*lc7-GLdshMGLm`1MtF8cc7-j7o#-e$8McXiz<aP4N5^ra|o-dpz(tq`{e|
z1(wimQR>4qQr-cj>&{73Hixp{NhKl>PSso|5NTmDfxxrJ1Tl(FB=E;4BH-=Lh;~Tc
zjf)&7dwJjYB%I=Y$K}rzoQv><f{RZ6!f`dOsFC89#3DF1&avM*2RAuRHOX~>o!lJZ
zUBWqyC-XpXsdtis-E&e0Y!@$>9eYE^?s@LmKMcZtgu0A(TsQWPXVmz(gg#zR*<~1n
zo^ZhsV0WX@$is)l4x`kw@pZ70)aky%oxH(eAD<|XC;mUDRrIIcihhdaI-HrFKQ5~`
z^a;cXQ*Ywy++Lkj|1~tAbMs&QH_%sIlVXbaf07`PYD?b``cii!n~dd$>MqCWT#=nP
z<MjO@+Qz@SCgE)k{zQUAs_g;lRE*63=HR;IORQ>3b>`)Nm*+41DSvw9)ckunYa#>}
z_+@yF1c}u6hp5YoZ}I~r`b6>R9Z=&RAx3M8Jdw>P<nezN0G~yCF~5&^o_~uUC^}y<
z2|qD^j7q`Fc5kW&k}Fl)uetxs+kx0y+`la^ioB>_!1V6r^{<`NKl+LYf6-UUM~zKu
spYr$zJYjn8=}lGrX;1P>{f&}B67T**I@>E+H_!io=l{KM<g?np`#%ohBme*a
literal 0
HcmV?d00001
@@ -203,6 +203,15 @@ InOutSpec in_out_specs[] =
"data/test-abidiff-exit/test-decl-struct-report.txt",
"output/test-abidiff-exit/test-decl-struct-report.txt"
},
+ {
+ "data/test-abidiff-exit/test-fun-param-v0.abi",
+ "data/test-abidiff-exit/test-fun-param-v1.abi",
+ "",
+ "",
+ abigail::tools_utils::ABIDIFF_ABI_CHANGE,
+ "data/test-abidiff-exit/test-fun-param-report.txt",
+ "output/test-abidiff-exit/test-fun-param-report.txt"
+ },
{0, 0, 0 ,0, abigail::tools_utils::ABIDIFF_OK, 0, 0}
};