From patchwork Mon May 4 16:24:39 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Giuliano Procida X-Patchwork-Id: 39215 From: gprocida@google.com (Giuliano Procida) Date: Mon, 4 May 2020 17:24:39 +0100 Subject: [PATCH 3/3] Add abidiff --offset-changes-are-harmless tests. In-Reply-To: <20200504162439.74028-1-gprocida@google.com> References: <20200504162439.74028-1-gprocida@google.com> Message-ID: <20200504162439.74028-4-gprocida@google.com> The new --offset-changes-are-harmless option changes the default interpretation of what constitutes a harmless change and impacts the --harmless and --no-harmful options. This commit adds tests covering the various possibilities. The object files have the following changes. - S::z changes from void* to int* (harmless) - S::a changes size (harmful) - S::b changes offset (normally harmful, harmless with new flag) * tests/data/Makefile.am: Add new test case files. * tests/data/test-abidiff-exit/test-offset-harm-report0.txt: New test case. * tests/data/test-abidiff-exit/test-offset-harm-report1.txt: Ditto. * tests/data/test-abidiff-exit/test-offset-harm-report2.txt: Ditto. * tests/data/test-abidiff-exit/test-offset-harm-report3.txt: Ditto. * tests/data/test-abidiff-exit/test-offset-harm-v0.c: Ditto. * tests/data/test-abidiff-exit/test-offset-harm-v0.o: Ditto. * tests/data/test-abidiff-exit/test-offset-harm-v1.c: Ditto. * tests/data/test-abidiff-exit/test-offset-harm-v1.o: Ditto. * tests/test-abidiff-exit.cc: Run new test cases. Signed-off-by: Giuliano Procida --- tests/data/Makefile.am | 8 ++++ .../test-offset-harm-report0.txt | 15 ++++++++ .../test-offset-harm-report1.txt | 20 ++++++++++ .../test-offset-harm-report2.txt | 3 ++ .../test-offset-harm-report3.txt | 14 +++++++ .../test-abidiff-exit/test-offset-harm-v0.c | 7 ++++ .../test-abidiff-exit/test-offset-harm-v0.o | Bin 0 -> 2872 bytes .../test-abidiff-exit/test-offset-harm-v1.c | 7 ++++ .../test-abidiff-exit/test-offset-harm-v1.o | Bin 0 -> 2864 bytes tests/test-abidiff-exit.cc | 36 ++++++++++++++++++ 10 files changed, 110 insertions(+) create mode 100644 tests/data/test-abidiff-exit/test-offset-harm-report0.txt create mode 100644 tests/data/test-abidiff-exit/test-offset-harm-report1.txt create mode 100644 tests/data/test-abidiff-exit/test-offset-harm-report2.txt create mode 100644 tests/data/test-abidiff-exit/test-offset-harm-report3.txt create mode 100644 tests/data/test-abidiff-exit/test-offset-harm-v0.c create mode 100644 tests/data/test-abidiff-exit/test-offset-harm-v0.o create mode 100644 tests/data/test-abidiff-exit/test-offset-harm-v1.c create mode 100644 tests/data/test-abidiff-exit/test-offset-harm-v1.o diff --git a/tests/data/Makefile.am b/tests/data/Makefile.am index a1b9bf64..6b116c55 100644 --- a/tests/data/Makefile.am +++ b/tests/data/Makefile.am @@ -151,6 +151,14 @@ 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-offset-harm-v0.c \ +test-abidiff-exit/test-offset-harm-v0.o \ +test-abidiff-exit/test-offset-harm-v1.c \ +test-abidiff-exit/test-offset-harm-v1.o \ +test-abidiff-exit/test-offset-harm-report0.txt \ +test-abidiff-exit/test-offset-harm-report1.txt \ +test-abidiff-exit/test-offset-harm-report2.txt \ +test-abidiff-exit/test-offset-harm-report3.txt \ \ test-diff-dwarf/test0-v0.cc \ test-diff-dwarf/test0-v0.o \ diff --git a/tests/data/test-abidiff-exit/test-offset-harm-report0.txt b/tests/data/test-abidiff-exit/test-offset-harm-report0.txt new file mode 100644 index 00000000..6ac7022d --- /dev/null +++ b/tests/data/test-abidiff-exit/test-offset-harm-report0.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(S*)' at test-offset-harm-v1.c:7:1 has some indirect sub-type changes: + parameter 1 of type 'S*' has sub-type changes: + in pointed to type 'struct S' at test-offset-harm-v1.c:1:1: + type size changed from 256 to 384 (in bits) + 1 data member changes (2 filtered): + type of 'int S::a[4]' changed: + type name changed from 'int[4]' to 'int[8]' + array type size changed from 128 to 256 + array type subrange 1 changed length from 4 to 8 + diff --git a/tests/data/test-abidiff-exit/test-offset-harm-report1.txt b/tests/data/test-abidiff-exit/test-offset-harm-report1.txt new file mode 100644 index 00000000..85a64b07 --- /dev/null +++ b/tests/data/test-abidiff-exit/test-offset-harm-report1.txt @@ -0,0 +1,20 @@ +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(S*)' at test-offset-harm-v1.c:7:1 has some indirect sub-type changes: + parameter 1 of type 'S*' has sub-type changes: + in pointed to type 'struct S' at test-offset-harm-v1.c:1:1: + type size changed from 256 to 384 (in bits) + 3 data member changes: + type of 'void* S::z' changed: + in pointed to type 'void': + type name changed from 'void' to 'int' + type size changed from 0 to 32 (in bits) + type of 'int S::a[4]' changed: + type name changed from 'int[4]' to 'int[8]' + array type size changed from 128 to 256 + array type subrange 1 changed length from 4 to 8 + 'int S::b' offset changed from 192 to 320 (in bits) (by +128 bits) + diff --git a/tests/data/test-abidiff-exit/test-offset-harm-report2.txt b/tests/data/test-abidiff-exit/test-offset-harm-report2.txt new file mode 100644 index 00000000..9666a8fd --- /dev/null +++ b/tests/data/test-abidiff-exit/test-offset-harm-report2.txt @@ -0,0 +1,3 @@ +Functions changes summary: 0 Removed, 0 Changed (1 filtered out), 0 Added function +Variables changes summary: 0 Removed, 0 Changed, 0 Added variable + diff --git a/tests/data/test-abidiff-exit/test-offset-harm-report3.txt b/tests/data/test-abidiff-exit/test-offset-harm-report3.txt new file mode 100644 index 00000000..c4eb748f --- /dev/null +++ b/tests/data/test-abidiff-exit/test-offset-harm-report3.txt @@ -0,0 +1,14 @@ +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(S*)' at test-offset-harm-v1.c:7:1 has some indirect sub-type changes: + parameter 1 of type 'S*' has sub-type changes: + in pointed to type 'struct S' at test-offset-harm-v1.c:1:1: + 2 data member changes (1 filtered): + type of 'void* S::z' changed: + in pointed to type 'void': + type name changed from 'void' to 'int' + 'int S::b' offset changed from 192 to 320 (in bits) (by +128 bits) + diff --git a/tests/data/test-abidiff-exit/test-offset-harm-v0.c b/tests/data/test-abidiff-exit/test-offset-harm-v0.c new file mode 100644 index 00000000..c05e9742 --- /dev/null +++ b/tests/data/test-abidiff-exit/test-offset-harm-v0.c @@ -0,0 +1,7 @@ +struct S { + void* z; + int a[4]; + int b; +}; + +void reg(struct S* s) { (void)s; } diff --git a/tests/data/test-abidiff-exit/test-offset-harm-v0.o b/tests/data/test-abidiff-exit/test-offset-harm-v0.o new file mode 100644 index 0000000000000000000000000000000000000000..b6222d63e7f27c8ea10d8173bbd98419650e657c GIT binary patch literal 2872 zcmbtV&ubiY6o22H-Rx|p*(TXa6XIbCN-a1uNtBwlq^?HW1d9}<7g56O?ssPgXJ^99 zY~5BxC?fP0Q4rCCAP61=j~<0yJ$U!*AK0j?!5Ot@8|dTC$HbS zQDY1wF}MyVnnVGn3ny~75WCQURk*YN@X!5+A3r{R@6nG4*9((bWH?jE%EwaV+S_0= zX1;@vaUWQ%MG_c3Fr)b{N~X~RR&Qn~u0h>wkPzX2fj$N_%_ed%>y0qZp_TFgSaa5* zEX2P30i6~zw4EcV_W1}b)1gSV!k%q+ETg^AUSX@v<@0FmFvGO0tJXE^ip4ruW(f?l zR1Z2kn6!QtEMyJF4m#wpZ~+cF9wNxK4GtYhS&(PN9np zC3kHNz@pp-Xo2UcQ|b{gheC2x3RH;u_%(_s#{OTK21Z6n9N3dM3xk*sY?|AfZ{D%@wqCNYxZCcQy}h};iN6=1{a(bgQ@Zjd zS?Wbe-;cZ?NrH%bqh!pz;3!S{;lTI&c#tOHz>C73-wOjjj651%<_-MZFGL6NK{y;b zd>ZBeH~03g+Rweld!Zkf{X5$`m$Z=-lL2r}aCZMKVAEx`ai(b=;}kxPIQ@x=1$d>s z{8?>pY2gMslyK#jR-g`l{ZnPciLQci5oZfBXE)GNMTR(Ty3K&uNtiR?v6<7QVn9oZ zbKEFLJcp5Dz|s>~iR1pSAOoJb3INX=-X16OFx%YKJC+W3L2_h^s7aX&vI5~WnpFak zR!RmE9}4{`4gW~!>w;5f>S|n4{MB_&6kMIf2dCtbJySmo;X`a$$a>vtr{K20sYkU> zaI<@3JZ8xAwB#cx<$RihOQ!|gUY3EI^2m1wyf+CB!+4mWt&sg*FXeaV%zo;}0iIkn zBno3LL$Cz6{bW4mcxAY8l5-a?4kyd~{`(?`j}C{aKjxzG|H(Emp5{u>ITv{lvrPSlt4MD^)h>-CQiqnxr&6bm{l4&!eU5M0)m{6oa6 z;{Ooww7*o6agu+EMk%X)_=;DO?)$ZfpSwE{Ge!K4mPL+V!e63LHGjWU%pbi9GG5Lr w^`qCO++9)swrH5{Z+dO?cv_RHp&nCHNOV7_q>rESR>l7=`u|=HMp=*l7e>q3{{R30 literal 0 HcmV?d00001 diff --git a/tests/data/test-abidiff-exit/test-offset-harm-v1.c b/tests/data/test-abidiff-exit/test-offset-harm-v1.c new file mode 100644 index 00000000..025e8462 --- /dev/null +++ b/tests/data/test-abidiff-exit/test-offset-harm-v1.c @@ -0,0 +1,7 @@ +struct S { + int* z; + int a[8]; + int b; +}; + +void reg(struct S* s) { (void)s; } diff --git a/tests/data/test-abidiff-exit/test-offset-harm-v1.o b/tests/data/test-abidiff-exit/test-offset-harm-v1.o new file mode 100644 index 0000000000000000000000000000000000000000..0b2ee10ccb2c4512f1671b5455057fb33de2b914 GIT binary patch literal 2864 zcmbtVUuzsy6hC)oH#^BBYm%)rAwEn&X$zg1Bud@3q^?HW1d9}Mo*?aWo-lI?ceth@WpAfEQDl?0)n8}5~D#(@h zV3RTPeT0l-V3kY)g99__K7yvv0amSlfZ_$Hn#60>S`el%NAi9A*RugkvyKy(kA)Ac zJ}FZrW8eLV+JyvlXGp4iIly=hxv&-XQln`Zjg7_%TdgmjMQxKAre$5Vu31+s*2LnL zz%cXaezS!^tIvUD?W3mlA_~_n!vvUPY`;m?^>eV_^w7$b$_5tZve(vCjPvW1slE2~ z8|!4hP%A{QtYJ-;s6;9bFm8d=atcr;?%`-;UX1 zY&)ZL9Eu%Zgdz^QIOTD7uyfS9>|B1uc6{6E^W;I;9mG)>jT2`a-Vef_lk(0`B&Ss6 zjg#0LMqNJi{3!B=!W%>*;rWMg)D3#v<6$q3f}S@FI=mD3JQ#Ykyu|DAlxL!YcrWPp z9dQ(-05^Acui6*h6rF&FdHv3I>!P+2fHPS?uv^FP0y|n}8;f=GF?R0-#OY6z_5St7 z^25sR(%cO+$l=nFnqP&#o|P%F$7L{nzsa|l(Hp2KBSRiDU1z{#_s^&d$WF)%MiT?( zPhdG-zS|5~I>jEhc?lVC;tBvfV|Z&!`!LB=zFFx|XQWoPfHNhNLS-PFRu}*N4 z2O~UT$kRCI10|*6Csl0XG&y?)F4y>>mVSKSEt5^G+ug_h!^Q=An;=w&*ep zLZMtR1-RX4G!l4QxM7qE7w-%wNqP4}=_CdR{g{u0Ec}164fLm8seY<(Z7EFllbla? zS`M5;MwouG-j?<{)BVq*0qukT>c54)dQ8fx^8Z4U0_nE&KF}lEF4&OxL;mu@6N%Hl zB1r97dRvHg@UO=t{3#7cU*&8v>bAF0qhn-DcP7zh&L*R7OY1DFe;^Nq@~8Ug*3#?m zA*RPf2%bpr7EKDI+a92g^r*p06KSYdTsyb23Xi*-<-xVOa%CGoGh?n{Q zA^mB86-oIi{y8d@T(o;Oa~VuEy6v~p|Ae{R(5