pull extensions for aliased types
diff --git a/libasn1compiler/asn1c_C.c b/libasn1compiler/asn1c_C.c
index 37b69bc..d75d73c 100644
--- a/libasn1compiler/asn1c_C.c
+++ b/libasn1compiler/asn1c_C.c
@@ -2338,7 +2338,7 @@
     etype = expr_get_type(arg, expr);
 
     if((arg->flags & A1C_GEN_OER)
-       && (expr->constraints || etype == ASN_BASIC_ENUMERATED
+       && (expr->combined_constraints || etype == ASN_BASIC_ENUMERATED
            || etype == ASN_CONSTR_CHOICE)) {
         /* Fall through */
     } else {
@@ -2393,7 +2393,7 @@
 	etype = expr_get_type(arg, expr);
 
 	if((arg->flags & A1C_GEN_PER)
-	&& (expr->constraints
+	&& (expr->combined_constraints
 		|| etype == ASN_BASIC_ENUMERATED
 		|| etype == ASN_CONSTR_CHOICE)
 	) {
@@ -3249,7 +3249,7 @@
 		}
 
 		if(arg->flags & A1C_GEN_OER) {
-			if(expr->constraints
+			if(expr->combined_constraints
 			|| expr->expr_type == ASN_BASIC_ENUMERATED
 			|| expr->expr_type == ASN_CONSTR_CHOICE) {
 				OUT("&asn_OER_type_%s_constr_%d,\n",
@@ -3262,7 +3262,7 @@
 		}
 
 		if(arg->flags & A1C_GEN_PER) {
-			if(expr->constraints
+			if(expr->combined_constraints
 			|| expr->expr_type == ASN_BASIC_ENUMERATED
 			|| expr->expr_type == ASN_CONSTR_CHOICE) {
 				OUT("&asn_PER_type_%s_constr_%d,\n",
diff --git a/tests/tests-asn1c-compiler/147-inherit-per-constraints-OK.asn1.-Pgen-OER b/tests/tests-asn1c-compiler/147-inherit-per-constraints-OK.asn1.-Pgen-OER
index c0272c4..b5a8cf5 100644
--- a/tests/tests-asn1c-compiler/147-inherit-per-constraints-OK.asn1.-Pgen-OER
+++ b/tests/tests-asn1c-compiler/147-inherit-per-constraints-OK.asn1.-Pgen-OER
@@ -134,6 +134,12 @@
  * so here we adjust the DEF accordingly.
  */
 
+/*** <<< CTDEFS [Alias] >>> ***/
+
+static asn_oer_constraints_t asn_OER_type_Alias_constr_1 GCC_NOTUSED = {
+	{ 2, 1 }	/* (0..65535) */,
+	-1};
+
 /*** <<< STAT-DEFS [Alias] >>> ***/
 
 static const ber_tlv_tag_t asn_DEF_Alias_tags_1[] = {
@@ -150,7 +156,7 @@
 	asn_DEF_Alias_tags_1,	/* Same as above */
 	sizeof(asn_DEF_Alias_tags_1)
 		/sizeof(asn_DEF_Alias_tags_1[0]), /* 1 */
-	0,	/* No OER visible constraints */
+	&asn_OER_type_Alias_constr_1,
 	0,	/* No PER visible constraints */
 	0, 0,	/* No members */
 	0	/* No specifics */
diff --git a/tests/tests-asn1c-compiler/147-inherit-per-constraints-OK.asn1.-Pgen-PER b/tests/tests-asn1c-compiler/147-inherit-per-constraints-OK.asn1.-Pgen-PER
index 8078490..88cc9cd 100644
--- a/tests/tests-asn1c-compiler/147-inherit-per-constraints-OK.asn1.-Pgen-PER
+++ b/tests/tests-asn1c-compiler/147-inherit-per-constraints-OK.asn1.-Pgen-PER
@@ -94,6 +94,7 @@
 
 /*** <<< FUNC-DECLS [Alias] >>> ***/
 
+extern asn_per_constraints_t asn_PER_type_Alias_constr_1;
 extern asn_TYPE_descriptor_t asn_DEF_Alias;
 asn_struct_free_f Alias_free;
 asn_struct_print_f Alias_print;
@@ -137,6 +138,14 @@
  * so here we adjust the DEF accordingly.
  */
 
+/*** <<< CTDEFS [Alias] >>> ***/
+
+asn_per_constraints_t asn_PER_type_Alias_constr_1 GCC_NOTUSED = {
+	{ APC_CONSTRAINED,	 16,  16,  0,  65535 }	/* (0..65535) */,
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	0, 0	/* No PER value map */
+};
+
 /*** <<< STAT-DEFS [Alias] >>> ***/
 
 static const ber_tlv_tag_t asn_DEF_Alias_tags_1[] = {
@@ -154,7 +163,7 @@
 	sizeof(asn_DEF_Alias_tags_1)
 		/sizeof(asn_DEF_Alias_tags_1[0]), /* 1 */
 	0,	/* No OER visible constraints */
-	0,	/* No PER visible constraints */
+	&asn_PER_type_Alias_constr_1,
 	0, 0,	/* No members */
 	0	/* No specifics */
 };
diff --git a/tests/tests-asn1c-compiler/50-constraint-OK.asn1.-Pgen-PER b/tests/tests-asn1c-compiler/50-constraint-OK.asn1.-Pgen-PER
index 924cad8..7020fd2 100644
--- a/tests/tests-asn1c-compiler/50-constraint-OK.asn1.-Pgen-PER
+++ b/tests/tests-asn1c-compiler/50-constraint-OK.asn1.-Pgen-PER
@@ -2095,11 +2095,30 @@
 	}
 }
 
+static int asn_PER_MAP_VisibleIdentifier_1_v2c(unsigned int value) {
+	if(value >= sizeof(permitted_alphabet_table_1)/sizeof(permitted_alphabet_table_1[0]))
+		return -1;
+	return permitted_alphabet_table_1[value] - 1;
+}
+static int asn_PER_MAP_VisibleIdentifier_1_c2v(unsigned int code) {
+	if(code >= sizeof(permitted_alphabet_code2value_1)/sizeof(permitted_alphabet_code2value_1[0]))
+		return -1;
+	return permitted_alphabet_code2value_1[code];
+}
 /*
  * This type is implemented using Identifier,
  * so here we adjust the DEF accordingly.
  */
 
+/*** <<< CTDEFS [VisibleIdentifier] >>> ***/
+
+static asn_per_constraints_t asn_PER_type_VisibleIdentifier_constr_1 GCC_NOTUSED = {
+	{ APC_CONSTRAINED,	 6,  6,  36,  122 }	/* (36..122) */,
+	{ APC_CONSTRAINED,	 5,  5,  1,  32 }	/* (SIZE(1..32)) */,
+	asn_PER_MAP_VisibleIdentifier_1_v2c,	/* Value to PER code map */
+	asn_PER_MAP_VisibleIdentifier_1_c2v	/* PER code to value map */
+};
+
 /*** <<< STAT-DEFS [VisibleIdentifier] >>> ***/
 
 static const ber_tlv_tag_t asn_DEF_VisibleIdentifier_tags_1[] = {
@@ -2117,7 +2136,7 @@
 	sizeof(asn_DEF_VisibleIdentifier_tags_1)
 		/sizeof(asn_DEF_VisibleIdentifier_tags_1[0]), /* 1 */
 	0,	/* No OER visible constraints */
-	0,	/* No PER visible constraints */
+	&asn_PER_type_VisibleIdentifier_constr_1,
 	0, 0,	/* No members */
 	0	/* No specifics */
 };