diff --git a/libasn1compiler/asn1c_C.c b/libasn1compiler/asn1c_C.c index 4d7a2149ca9264fb1ab22a18c6b66a7ea63ae62a..658ec552f03221c96a0497b5275dba8be3aff972 100644 --- a/libasn1compiler/asn1c_C.c +++ b/libasn1compiler/asn1c_C.c @@ -820,24 +820,23 @@ asn1c_lang_C_type_SEx_OF(arg_t *arg) { && memb->expr_type == ASN_BASIC_INTEGER)) && expr_elements_count(arg, memb))) { arg_t tmp; - asn1p_expr_t tmp_memb; + asn1p_expr_t *tmp_memb = memb; + enum asn1p_expr_marker_e flags = memb->marker.flags; arg->embed++; tmp = *arg; - tmp.expr = &tmp_memb; - tmp_memb = *memb; - tmp_memb.marker.flags &= ~EM_INDIRECT; - tmp_memb._anonymous_type = 1; - if(tmp_memb.Identifier == 0) { - tmp_memb.Identifier = "Member"; + tmp.expr = tmp_memb; + tmp_memb->marker.flags &= ~EM_INDIRECT; + tmp_memb->_anonymous_type = 1; + if(tmp_memb->Identifier == 0) { + tmp_memb->Identifier = strdup("Member"); if(0) - tmp_memb.Identifier = strdup( + tmp_memb->Identifier = strdup( asn1c_make_identifier(0, expr, "Member", 0)); - assert(tmp_memb.Identifier); + assert(tmp_memb->Identifier); } tmp.default_cb(&tmp, NULL); - if(tmp_memb.Identifier != memb->Identifier) - if(0) free(tmp_memb.Identifier); + tmp_memb->marker.flags = flags; arg->embed--; assert(arg->target->target == OT_TYPE_DECLS || arg->target->target == OT_FWD_DEFS);