diff --git a/compiler2/Type_chk.cc b/compiler2/Type_chk.cc index fc74f72ead7824ffbeb8a6c5412c52ed6fb3fb03..4a1b0278493d5c30e8c8225782283d79f9d4a552 100644 --- a/compiler2/Type_chk.cc +++ b/compiler2/Type_chk.cc @@ -3152,7 +3152,15 @@ void Type::chk_oer() { se_comps.clear(); se_comps2.clear(); } + // no break case T_SEQ_A: { + // These asn1 types are sequences but don't need any checking. + // It could screw up XER coding for example. + if (t->get_typename().find("CHARACTER STRING", 0) != t->get_typename().size() || + t->get_typename().find("EMBEDDED PDV", 0) != t->get_typename().size() || + t->get_typename().find("@EXTERNAL", 0) != t->get_typename().size()) { + break; + } oerattrib->extendable = t->u.secho.ctss->has_ellipsis(); if (oerattrib->extendable) { oerattrib->nr_of_root_comps = t->u.secho.ctss->get_nof_root_comps(); diff --git a/compiler2/record.c b/compiler2/record.c index 53333fec1080e96375f94ac8f02431b29d1fa92f..38f8fcf3561ec59245c84224d77f12c030befad4 100644 --- a/compiler2/record.c +++ b/compiler2/record.c @@ -4655,7 +4655,7 @@ void defRecordClass1(const struct_def *sdef, output_struct *output) if (oer_needed) { // OER encode, RT1 src = mputprintf(src, - "int %s::OER_encode(const TTCN_Typedescriptor_t& p_td, TTCN_Buffer& p_buf) const\n" + "int %s::OER_encode(const TTCN_Typedescriptor_t&, TTCN_Buffer& p_buf) const\n" "{\n" " if (!is_bound()) {\n" " TTCN_EncDec_ErrorContext::error(TTCN_EncDec::ET_UNBOUND,\n" diff --git a/regression_test/OER/OER.ttcn b/regression_test/OER/OER.ttcn index 775f39a57a759f5128a809b932c31c428527b463..dfd8ea787dcbb5dc7cb3bcaacfeaeb4124dcc04a 100644 --- a/regression_test/OER/OER.ttcn +++ b/regression_test/OER/OER.ttcn @@ -2279,6 +2279,13 @@ setverdict(fail, "tc_sequence: ", match(er, erres)); } + er := { me := 1, me2 := 2 } + os := '8001010102020780020103'O; + erres := dec_ExtensionRecord(os); + if (er != erres) { + setverdict(fail, "tc_sequence: ", match(er, erres)); + } + var ExtensionRecord2 er2, erres2; er2 := { me := 1,