Bug Report no. 34 |
Reported By
Date16 Oct 1998 PlatformsAll VersionomniORB 2.6.0 or earlier (Fixed in 2.6.1) DescriptionIn IDL, when a fixed size union branch is followed by an array of union branch, the data member of the fixed sizze branch is not defined in the generated stub. For example: //IDL union X switch (boolean) { case TRUE: short s; }; union U switch (long) { case 1: long x; case 2: X y[2]; }; The private data member of x is not generated in the stub code. PatchThis patch fixes the problem (and in a separate text file): *** omniORB_2.6.0/src/tool/omniidl2/omniORB2_be/o2be_union.cc Wed Oct 14 15:13:29 1998 --- omniORB_2.6.0_patched/src/tool/omniidl2/omniORB2_be/o2be_union.cc Fri Oct 16 12:26:24 1998 *************** *** 28,33 **** --- 28,38 ---- /* $Log: 34.html,v $ Revision 1.4 1999/02/04 18:45:02 sll *** empty log message *** # Revision 1.3 1998/11/19 15:56:48 sll # *** empty log message *** # # Revision 1.2 1998/10/20 18:14:58 sll # *** empty log message *** # Revision 1.1 1998/10/16 15:05:23 sll Initial revision + Revision 1.18 1998/10/16 11:26:21 sll + Previously, if a fixed size union branch is followed by an array of union + branch, the data member of the fixed size branch is not defined in the + generated stub. This is now fixed. + Revision 1.17 1998/10/14 14:13:28 sll Do not put fixed-size struct inside the anonymous union data member in a union. *************** *** 526,532 **** ntype != o2be_operation::tAny && ntype != o2be_operation::tTypeCode) { - has_fix_member = I_TRUE; if (ntype == o2be_operation::tArrayFixed) { // Array of fixed size union is a special case, the data --- 531,536 ---- *************** *** 543,554 **** while (dd->node_type() == AST_Decl::NT_typedef) { dd = o2be_typedef::narrow_from_decl(dd)->base_type(); } ! if (dd->node_type() == AST_Decl::NT_union) { ! // The element is a union. Do not define the data member // in the anonymous union. - has_fix_member = I_FALSE; } } } switch (ntype) --- 547,563 ---- while (dd->node_type() == AST_Decl::NT_typedef) { dd = o2be_typedef::narrow_from_decl(dd)->base_type(); } ! if (dd->node_type() == AST_Decl::NT_union || ! dd->node_type() == AST_Decl::NT_struct) { ! // The element is a union or a struct. ! // Do not define the data member // in the anonymous union. } + else + has_fix_member = I_TRUE; } + else + has_fix_member = I_TRUE; } Action |
|
For comments, feedback, etc, please see the 'Keeping in touch' page. |