If I try to create a union TypeCode which has a label whose type is not TypeCode::equal() to the discriminator TypeCode, the create_union_tc() method incorrectly throws BAD_TYPECODE instead of BAD_PARAM. If I try to create a union TypeCode which has the same label value in multiple case arms, create_union_tc() returns a bogus TypeCode rather than throwing BAD_PARAM.