From patchwork Tue May 5 18:06:09 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Giuliano Procida X-Patchwork-Id: 39222 From: gprocida@google.com (Giuliano Procida) Date: Tue, 5 May 2020 19:06:09 +0100 Subject: [PATCH 1/4] Add XML reader test for incomplete function types. In-Reply-To: <20200505180612.232158-1-gprocida@google.com> References: <20200505180612.232158-1-gprocida@google.com> Message-ID: <20200505180612.232158-2-gprocida@google.com> 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 --- 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 new file mode 100644 index 00000000..816f74c8 --- /dev/null +++ b/tests/data/test-abidiff-exit/test-fun-param-v0.abi @@ -0,0 +1,44 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 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~(BwFD$rNr8ntj?-lfhGme&ev@n#IjUj-CVRduVy(3)qh9OF7n7yxrA!uu z7UupGl|n@Tx@Jg}oq-Z|7e@u2#F4ST>opvcV}e`DAa#Yn7JXFDU3Y^&`*qoqxt2GEE7x!6JL}KtTjqwju5WZVy7>3BZcO5-?`*q{?}T0-MJw!&wof)M z8W*3@4OcgYR&>+vkHWwYrjarA-|+l_5nJ}yiNHqwus^nVCaDTSnK4PSso|5NRo$K;YkTnc@=({Lxedyx$4Y4rO=a z0>{ZdyYG7$oZ^1NZxbA~-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={y!b7CphTZ2KD`5S{3FC@O_3+E2@QDs9|gc?5ns%2A)e=do*yVW zUs)1DvNFunKmrpo@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 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 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*4D#~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@rsKuTStTHW8B+9 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_ZE2iqs@ 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=Z4qQr-cj>&{73Hixp{NhKl>PSso|5NTmDfxxrJ1Tl(FB=E;4BH-=Lh;~Tc zjf)&7dwJjYB%I=Y$K}rzoQv>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 z3b>`)Nm*+41DSvw9)ckunYa#>} z_+@yF1c}u6hp5YoZ}I~r`b6>R9Z=&RAx3M8Jdw>P_!1V6r^{<`NKl+LYf6-UUM~zKu spYr$zJYjn8=}lGrX;1P>{f&}B67T**I@>E+H_!io=l{KM