Bug 27267 - Better support for opaque enum types
Commit Message
Hello,
Upon a request to build the IR for a opaque enum type,
get_opaque_version_of_type wrongly returns a nil type even though the
code is in there to construct an opaque variant of the enum.
This patch cleans up that code to let it build an opaque enum type.
It also ensures the opaque enum type is properly added to its lexical
scope to ensure proper life cycle management.
* src/abg-dwarf-reader.cc (get_opaque_version_of_type): Do not
quit early for enum types, because the code that comes a bit later
can handle enums. Add the newly built enum to its scope for
proper life cycle management.
* tests/data/test-diff-suppr/PR27267/include-dir-v{0,1}/include.h: New
include files for the input test library.
* tests/data/test-diff-suppr/PR27267/libtestpr27267-v{0,1}.so: New
input test library.
* tests/data/test-diff-suppr/PR27267/report-1.txt: New reference
output for the comparison.
* tests/data/test-diff-suppr/PR27267/v{0,1}.c: Source code for the
new input test library.
* tests/data/Makefile.am: Add the new test material above to
source distribution.
* tests/test-diff-suppr.cc (in_out_specs): Add the new test input
above to the test harness.
Signed-off-by: Dodji Seketeli <dodji@redhat.com>
---
src/abg-dwarf-reader.cc | 7 +----
tests/data/Makefile.am | 7 +++++
.../PR27267/include-dir-v0/include.h | 8 +++++
.../PR27267/include-dir-v1/include.h | 8 +++++
.../PR27267/libtestpr27267-v0.so | Bin 0 -> 17376 bytes
.../PR27267/libtestpr27267-v1.so | Bin 0 -> 17400 bytes
.../data/test-diff-suppr/PR27267/report-1.txt | 0
tests/data/test-diff-suppr/PR27267/v0.c | 25 ++++++++++++++++
tests/data/test-diff-suppr/PR27267/v1.c | 28 ++++++++++++++++++
tests/test-diff-suppr.cc | 10 +++++++
10 files changed, 87 insertions(+), 6 deletions(-)
create mode 100644 tests/data/test-diff-suppr/PR27267/include-dir-v0/include.h
create mode 100644 tests/data/test-diff-suppr/PR27267/include-dir-v1/include.h
create mode 100755 tests/data/test-diff-suppr/PR27267/libtestpr27267-v0.so
create mode 100755 tests/data/test-diff-suppr/PR27267/libtestpr27267-v1.so
create mode 100644 tests/data/test-diff-suppr/PR27267/report-1.txt
create mode 100644 tests/data/test-diff-suppr/PR27267/v0.c
create mode 100644 tests/data/test-diff-suppr/PR27267/v1.c
@@ -15906,12 +15906,6 @@ get_opaque_version_of_type(read_context &ctxt,
&& tag != DW_TAG_enumeration_type)
return result;
- if (tag == DW_TAG_union_type)
- // TODO: also handle declaration-only unions. To do that, we mostly
- // need to adapt add_or_update_union_type to make it schedule
- // declaration-only unions for resolution too.
- return result;
-
string type_name, linkage_name;
location type_location;
die_loc_and_name(ctxt, type_die, type_location, type_name, linkage_name);
@@ -15973,6 +15967,7 @@ get_opaque_version_of_type(read_context &ctxt,
underlying_type,
enumeratorz,
linkage_name));
+ add_decl_to_scope(enum_type, scope);
result = enum_type;
}
}
@@ -1482,6 +1482,13 @@ test-diff-suppr/libtest48-soname-abixml-suppr.txt \
test-diff-suppr/libtest48-soname-abixml-suppr-2.txt \
test-diff-suppr/libtest48-soname-abixml-suppr-3.txt \
test-diff-suppr/libtest48-soname-abixml-suppr-4.txt \
+test-diff-suppr/PR27267/include-dir-v0/include.h \
+test-diff-suppr/PR27267/include-dir-v1/include.h \
+test-diff-suppr/PR27267/v0.c \
+test-diff-suppr/PR27267/v1.c \
+test-diff-suppr/PR27267/libtestpr27267-v0.so \
+test-diff-suppr/PR27267/libtestpr27267-v1.so \
+test-diff-suppr/PR27267/report-1.txt \
\
test-diff-dwarf-abixml/test0-pr19026-libvtkIOSQL-6.1.so.1 \
test-diff-dwarf-abixml/test0-pr19026-libvtkIOSQL-6.1.so.1.abi \
new file mode 100644
@@ -0,0 +1,8 @@
+enum opaque_enum;
+struct opaque_struct;
+
+typedef enum opaque_enum opaque_enum;
+typedef struct opaque_struct opaque_struct;
+
+void
+fn(opaque_struct *, opaque_enum *e);
new file mode 100644
@@ -0,0 +1,8 @@
+enum opaque_enum;
+struct opaque_struct;
+
+typedef enum opaque_enum opaque_enum;
+typedef struct opaque_struct opaque_struct;
+
+void
+fn(opaque_struct *, opaque_enum *e);
new file mode 100755
GIT binary patch
literal 17376
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
literal 0
HcmV?d00001
new file mode 100755
GIT binary patch
literal 17400
zcmeHOU1%KF6~41S(n>3@B-?S<R$`A+h00BKB(39rWUnMkS{K`KRU2YT7|rg^t|sh{
zx-)A_fwrbjO<c#|Jd}o#hY|uwUqYZSp?Ro7Li*B&G*F6PirO^bKxkD;irf}&&$;)W
z(d=ktyL~Ve=7^bd&(C-6oilgl-dWxI{i&1FAw^+CVRn?El<5<ij5Mqskp*BGc93<!
zS!KJpZ)DB1uCyqP#F>nXbwtry%6>j7n?#)KsOBM61Ouu3?D7|-NZgC-09#BG4zZ)H
zJQ)(QDmmd$M4T#ds>Bh$DcearCc^MGVmlAYcz!-8{fMJ4(wWbk0xzpvbgzr9^HHfL
zPPlIZ4%_*lL}{Ou^=*`wRe62HrO2;uD^wPSW9IZZ*8J*1U*z^4?N>doy}9?xmq*_D
z_m17z7QB4C&xn)l`vDX=q5jsz^HOThu$^if6UJ+&e`*8$H0U3P!%ycxv6;o$9hs0J
za?tfsrB>B#$EZ8H&h!&!Pw54-Zk8<DG3#efO_pm_^Q@68o5I%KqURS4y=Ya9vh{+=
zid9y&a(T_JY5UpC$rBTkdRj|s`>0OH7G4*U0)Ni}r~A~{VRd0PbKDC3nEJ1jSEOT~
zPyde8Cw+R7myd}6cyFj~)ZF&y@g5Sbc=UMhiB>&&>XT?oW`sv4Ft1){gL9C9AOk@L
zf(!&12r>|4Ajm+Ffgl49GXsC`-TBY#<u78{YtdW7jAeg#(+M>{&R+g7_5p83bKjpp
z-F)KDaPHleffCB|X#0G**=%O7k8#}f=qCt2wCX$pp{`&VLUlEldv{$z=MN+Y|DU7r
z`o7nZ?YW!1x{`hWFUPX)uZFYAN7>)rb+$r)b231zxm@hsb$ktv?Y%T+f|)g*JeR#Z
zmd0ZC>Ss<5gq}{pm&<u**6jkEK8lWkQF#vPcI!v{=NG|v4lvoP-(AgKZLDOkO|4w(
zgY)WDewO7kksHrp7Tg@USpj80K?Z^h1Q`f25M&_8K#+kT13?CY3<MbnG7x0o|0n~>
zK==s$FB$*Gr>-=c2Z7%KJ_j5L|Hq4@yfDj@#Xe=Ar!#f~{!usxI>asiwb@jGvqax?
zBKeKp_{G>Ic5KIyukRh?|87Me_<U!tKurF>)$v5%mC)p-jywcHTtGnvf(!&12r>|4
zAjm+Ffgl4x27(L(83;1)P%}X5NB!$XX-z1uMMdfn%w3qeNy>x$qOe`cv_5r!WXX3(
zPU}?h`w)q~1;4!8tf4$77oGAo;vgsGVpCe<{F1bHqcc!dFj&beC@HzSMl~Z862{0*
z-?z9v73nL2u{pU|mGtk*K-A8+q#rEG<wWuBHbwhimHzObW_~@CNB9ip@)c>nBW1Up
zGTy^tw2s|h-+sAncxH0)usQ@Qy!WW1quPizqNYdEBcti`UUg{JET~z-k%rXB9teW@
z;ZV5XnejnouQ9r|mq5mB=R*sfx81{s`q)#lueFPlk$76q-OgvX#1sEteW<Mi_h>V<
zbyU`g>(fOa#9HCE7Kt6=()!cyKqb0jOhIf9K5#F=(GD2e42Do-$01;0EO$n(!&&L>
z_%^VJIfAEArbNs%G$OPUl%eR(60j(iV@iJv{W~fnOxe<#f+Cc`e=9FXARK=jVz7=~
zNh<ypD6jnn09`iNwqhyt%6yjz!r&)dm}A{BY({sC2Uhx(ClXuY;lx0qU)kK*2M=Co
z8w)26$B)Dh#ZPR3D~KrJ#L;*h1ff(w85v^X*rV{2N4J1A9$&L`Yyu0R4}wSMAdAP3
zLJe?bnsRJAS--X&E6gN+GO-;ac11n75Io1-y@108@Wu8K*z5u+RFr=uHX*|Y84ks&
z=F5$OnJQTI)P+&TE{tk<Ffpmu=J|5^sKUBJl&El0iN@cHb`_&NB|IyQP#8iss<u_C
z!n0&m9TBFsV0@=x>Snc3VX|yH^+w*otrqI!=z#}#7S&XtQCY|twwW>)9aYP#sfyF6
znqwuiYSt|jje355Z1Ld!)c&W{REZ7S<=RDi!N{AV!-ZPmd26_2Im57F!N^%9!zvFK
ztwqxwc1+u`hYN;d@FFCjSWMZCg@yX?nc4J#^!@{whI<iQw7W0H>lcPjN$>queVEbv
zzEvM_$AwmXl+pXORo}trz1*trWb}S-)yLd%pj8iVefiwB>bsfRRv&lYfvx^MjNWOj
z`c3d-tXCt-VU}QOTYay)AH<6aLnCRNZPoWP+W*n2-^|*L2Vu5_(LRw@e;7S8UX3V+
z*&|GCtKYWX88l%Sb%*BGo5JoW-D(Rnnq~O)G`sNYX%^zw)9hnSkB@hR{jIsC5v3kr
zA(&mz_(FDgxp4i0@4oMrdYVs>KRz6aCqGyp(j**8oBQ=V=&@d!pP?_(1vnJ8{=WYh
z^zGWe(RKZl$4RhDDinOwF3wxv6M|Wwzu&$MdWEg;SMPEC`hN8xuWNlj|2_BLx~~6x
zD)s*Ub_et!*o_FOYazUWYKuk)1CWSz`@MF8zMX$+1N{u>A8!+%<?D{^G>SzS4c4}c
z=}tw@<AyPt>3X52m&&!AQPvAit#0c^W0B=+m4&kDm<4U5y$5b0vvi|gH<n;raOz8}
zST`!B4lnu25<onX4xUbnD<7M5eR_8M)RaDT`Z(@q!+2PgUDM}{Y5}*g9Y241{M3m_
z(84gIPh}+_dwdpDu;Y!OGbf*!7(b~$Gd=ySsk8do@rjdD5D;s<=QcT*HMHAQ_W&E`
zGMSdma+<wVaf}?(U{Dl%o=Vl4V``;pL(4U+av^0E7?<V^d!A{9r79o=ck04&!K~X>
zt=b~!V5^&D0|BzMP<EKcuTXPfIAt17pJvX>#LpK1Lz3_mcR+Yj8AnYFt<`J18Aip*
zL)A412q%r#lCy25L4T;gZ5GYq*P<DYQ@3&r7=8h2<{BjkYE(;WqE#(oRAI{H>gENK
z%2w5+GGwY<xBYK*_(sLaU`PTt+TTiX<>wTMOoP%t;M<4rbFx5uP<qmLk(e#Ja6T!+
zZ#}}({DAlk>5BEjqw0QN(sx=0bQqiPNm&u`D%iY)F}#!o0l)1CPxB4pI9?!8`^k?u
z?mNYAMUrV=LR>{KkiY#x%UD6$2>-6Eh&aBdk*I#kA6-9QAI6?QC!jeLJe>RxkKf3C
z{37TuC-gn;zJKL=*gxXR@PH6x1M}iliE}wQN=~nL;@|V(Gtxl(j~n1g{h|*~;~8-n
znOex-{vSy^<)5k2U2^}-!jFH|hgT(zctM6EM)@cCbtoj@aPRL?VR83ylcVH>C;m3*
zd*L8F%@g}H0U$pKcke&xe+dS~gQxjq@;-Qq_iHF%-=X?x-bwrHZ(?vD${W>7_y1$C
zdF!Y7>GCj#F;y`4OnBn>UG2rQjC36lT$Lg*!V&)i7_jWNKO;O<i6=jy6?IV=`KNGT
z{n8y(oCq(|NNVnj0%DN9fP;UGbBVe0=QGrPa+G$;qZC;P>^>K6T7XYkB!9d7zWp2E
ze<ty_L>Tw%$3M0Kekm;=Z@5TN@Z+D{0RPxt;a|KD{(!{$uk*6R<8KyTqWZnuefB+$
z&ps`LRhe-7T?Ol){y^_l{N0fHjzEa>8T{=AC{Gm$aoxSbpOf0*e{om<Chmj(4|hk>
A1poj5
literal 0
HcmV?d00001
new file mode 100644
new file mode 100644
@@ -0,0 +1,25 @@
+/**
+ *
+ * Compile with:
+ * gcc -shared -g -Wall -o libtestpr27267-v0.so v0.c
+ *
+ */
+
+#include "include-dir-v0/include.h"
+
+enum opaque_enum
+{
+ e0,
+ e1
+};
+
+struct opaque_struct
+{
+ opaque_enum m0;
+};
+
+void
+fn(opaque_struct * s, opaque_enum *e)
+{
+ s->m0 = *e;
+}
new file mode 100644
@@ -0,0 +1,28 @@
+/**
+ *
+ * Compile with:
+ * gcc -shared -g -Wall -o libtestpr27267-v1.so v1.c
+ *
+ */
+
+#include "include-dir-v1/include.h"
+
+enum opaque_enum
+{
+ e0,
+ e1,
+ e2
+};
+
+struct opaque_struct
+{
+ opaque_enum m0;
+ opaque_enum m1;
+};
+
+void
+fn(opaque_struct * s, opaque_enum *e)
+{
+ s->m0 = *e;
+ s->m1 = s->m0;
+}
@@ -2026,6 +2026,16 @@ InOutSpec in_out_specs[] =
"data/test-diff-suppr/libtest48-soname-abixml-report-1.txt",
"output/test-diff-suppr/libtest48-soname-abixml-report-1_suppr4.txt"
},
+ {
+ "data/test-diff-suppr/PR27267/libtestpr27267-v0.so",
+ "data/test-diff-suppr/PR27267/libtestpr27267-v1.so",
+ "data/test-diff-suppr/PR27267/include-dir-v0",
+ "data/test-diff-suppr/PR27267/include-dir-v1",
+ "",
+ "--drop-private-types --no-default-suppression",
+ "data/test-diff-suppr/PR27267/report-1.txt",
+ "output/test-diff-suppr/PR27267/report-1.txt"
+ },
// This should be the last entry
{NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL}
};