From 0a603b985b5105db9f1e4b284dddd1ea4284964f Mon Sep 17 00:00:00 2001
From: BenceJanosSzabo <bence.janos.szabo@ericsson.com>
Date: Thu, 9 Feb 2017 15:47:25 +0100
Subject: [PATCH] Fixed modulepar with refers produces fatal error (Bug 511976)

Change-Id: I0a81fabc3a8bb92e89126e2d5511f29bef146865
Signed-off-by: BenceJanosSzabo <bence.janos.szabo@ericsson.com>
---
 compiler2/ttcn3/AST_ttcn3.cc                  |  2 +-
 .../functionReference/FuncRef.ttcn            | 20 +++++++++++++++++++
 2 files changed, 21 insertions(+), 1 deletion(-)

diff --git a/compiler2/ttcn3/AST_ttcn3.cc b/compiler2/ttcn3/AST_ttcn3.cc
index 2bc045e2b..30393a8fd 100644
--- a/compiler2/ttcn3/AST_ttcn3.cc
+++ b/compiler2/ttcn3/AST_ttcn3.cc
@@ -3847,8 +3847,8 @@ namespace Ttcn {
       if (t->get_fat_runs_on_self()) {
         error("Type of module parameter cannot be of function reference type"
             " `%s' which has runs on self clause", t->get_fullname().c_str());
+        break;
       }
-      break;
     default:
 #if defined(MINGW)
       checked = true;
diff --git a/regression_test/functionReference/FuncRef.ttcn b/regression_test/functionReference/FuncRef.ttcn
index 99c7b0635..ff99e5831 100644
--- a/regression_test/functionReference/FuncRef.ttcn
+++ b/regression_test/functionReference/FuncRef.ttcn
@@ -29,6 +29,16 @@ function add(in integer a, in integer b) return integer { return a+b; }
 function sub(in integer a, in integer b) return integer { return a-b; }
 function mul(in integer a, in integer b) return integer { return a*b; }
 
+public function my_int2str(in integer a) return charstring {
+  var charstring f := int2str(a);
+  return f;
+}
+
+type function my_int2str_type(in integer a) return charstring;
+
+modulepar my_int2str_type modulepar_my_intstr := refers(my_int2str);
+
+
 type union operator_type
 {
   un_oper  unary,
@@ -443,6 +453,15 @@ function f_refers() {
   var f_FT vf := valueof(f_FT:refers(f_refers));  
 }
 
+// for Bug 511976 
+testcase tc_modulepar_refer() runs on FuncRef_comp {
+  if (modulepar_my_intstr.apply(4) == "4") {
+    setverdict(pass);
+  } else {
+    setverdict(fail);
+  }
+}
+
 
 control
 {
@@ -465,6 +484,7 @@ control
   execute(tc_runsonself());
   execute(tc_functionrefIsbound());
   execute(tc_send_tc());
+  execute(tc_modulepar_refer());
 }
 }
 
-- 
GitLab