Skip to content

Function with out/inout parameters can be called with parameters received as lazy or fuzzy

Summary

A function A having lazy or fuzzy parameters can call another function B, passing its lazy or fuzzy parameters to B. The problem is that this is not allowed if function B has out or inout parameters. But TITAN allows it (I don't see the logic behind this but point k) in section 5.4.2 of the standard states so).

Steps and/or TTCN-3 code to reproduce

Create a TTCN-3 module, and include this:

type component ct_empty{}

function fn_no_passing_lazy_fuzzy_to_inout_out_function(@lazy integer l, @fuzzy integer f){
  var integer vo := 1;
  var integer vio := 2;
  fn_internal_no_passing_lazy_fuzzy_to_inout_out_function(vo,vio,l,f);
  if(vo==l and vio==f){setverdict(pass);}
}

function fn_internal_no_passing_lazy_fuzzy_to_inout_out_function(out integer o, inout integer io, integer i1, integer i2){
  o := i1;
  io := i2;
}

testcase tc_no_passing_lazy_fuzzy_to_inout_out_function() runs on ct_empty{
  fn_no_passing_lazy_fuzzy_to_inout_out_function(3,4);
}

The compile and run.

What is the current bug behavior?

Test case passes.

What is the expected correct behavior?

An error should be received.

Relevant logs and/or screenshots

Possible fixes

Titan version

8.1.2

Platform details (OS type and version)

Microsoft Windows 10 Enterprise 10.0.19042

/cc @aknappqwt