parse advanced WITH COMPONENTS
diff --git a/libasn1compiler/asn1c_ioc.c b/libasn1compiler/asn1c_ioc.c
index 37719d1..02e37a7 100644
--- a/libasn1compiler/asn1c_ioc.c
+++ b/libasn1compiler/asn1c_ioc.c
@@ -24,8 +24,18 @@
assert(ct->elements[0]->type == ACT_EL_VALUE);
asn1p_value_t *val = ct->elements[0]->value;
- if(val->type == ATV_VALUESET && val->value.constraint->type == ACT_EL_TYPE && val->value.constraint->containedSubtype && val->value.constraint->containedSubtype->type == ATV_REFERENCED) {
- return val->value.constraint->containedSubtype->value.reference;
+ if(val->type == ATV_VALUESET && val->value.constraint->type == ACT_EL_TYPE) {
+ asn1p_value_t *csub = val->value.constraint->containedSubtype;
+ if(!csub) {
+ /* Ignore */
+ } else if(csub->type == ATV_REFERENCED) {
+ return csub->value.reference;
+ } else if(csub->type == ATV_TYPE) {
+ if(csub->value.v_type->expr_type == A1TC_REFERENCE) {
+ assert(csub->value.v_type->reference);
+ return csub->value.v_type->reference;
+ }
+ }
}
if(val->type != ATV_REFERENCED) {
FATAL("Set reference: %s", asn1f_printable_value(val));