From ab83542a3dc75eaecc9e9a28ad7bcccf2e6d7d88 Mon Sep 17 00:00:00 2001
From: Botond Baranyi <botond.baranyi@ericsson.com>
Date: Tue, 29 Oct 2019 17:19:32 +0100
Subject: [PATCH] Fixed usage of optional field in value redirect (bug 552529)

Change-Id: I7f8b9c347811cb00fb6cd04f1514ac750dcba719
Signed-off-by: Botond Baranyi <botond.baranyi@ericsson.com>
---
 compiler2/ttcn3/Statement.cc | 8 +++++++-
 1 file changed, 7 insertions(+), 1 deletion(-)

diff --git a/compiler2/ttcn3/Statement.cc b/compiler2/ttcn3/Statement.cc
index 1bb7f0d6d..0363c48f0 100644
--- a/compiler2/ttcn3/Statement.cc
+++ b/compiler2/ttcn3/Statement.cc
@@ -10707,8 +10707,14 @@ error:
         expression_struct var_ref_expr;
         Code::init_expr(&var_ref_expr);
         inst_params_str = mputstr(inst_params_str, "&(");
-        v[i]->get_var_ref()->generate_code(&var_ref_expr);
+        Reference* ref = v[i]->get_var_ref();
+        ref->generate_code(&var_ref_expr);
         inst_params_str = mputstr(inst_params_str, var_ref_expr.expr);
+        if (ref->get_refd_assignment()->get_Type()->get_type_refd_last()->
+            get_field_type(ref->get_subrefs(),
+            Common::Type::EXPECTED_DYNAMIC_VALUE)->is_optional_field()) {
+          inst_params_str = mputstr(inst_params_str, "()");
+        }
         inst_params_str = mputc(inst_params_str, ')');
         if (var_ref_expr.preamble != NULL) {
           expr->preamble = mputstr(expr->preamble, var_ref_expr.preamble);
-- 
GitLab