Opened 6 years ago

Last modified 6 years ago

#5061 new defect

[NF] Are public parameters allowed in functions by the Modelica spec?

Reported by: Adrian Pop Owned by: Per Östlund
Priority: high Milestone: 2.0.0
Component: New Instantiation Version:
Keywords: Cc:

Description

The NF is really strict on this:
https://libraries.openmodelica.org/branches/newInst/AdvancedNoise/files/AdvancedNoise_AdvancedNoise.Examples.RailIrregularities.Comparisons.FilterAndConvolution.err

[/var/lib/hudson/slave/workspace/OpenModelica_TEST_LIBS/OpenModelica/OMCompiler/build/lib/omlibrary/AdvancedNoise 1.0.0/Generators/QuickXorshift64star/package.mo:13:5-13:62:writable] Warning: Invalid public variable p, function variables that are not input/output must be protected.

The function looks like this:

redeclare function extends initialState
  "Returns an initial state for the xorshift64* algorithm"

    /* According to http://vigna.di.unimi.it/ftp/papers/xorshift.pdf, the xorshoft*
     random number generator generates statistically random numbers from a bad seed
     within one iteration.
    */
    parameter Integer p = 1 "The number of iterations to use";
protected
    Real r "Random number not used outside the function";

  algorithm
// more here  
end function initialState;

I think we should just issue a warning and allow this.

Change History (4)

comment:1 by Francesco Casella, 6 years ago

The Modelica Specification, section 12.4.4, is very clear:

Components in a function can be divided into three groups:

  • Public components which are input formal parameters.
  • Public components which are output formal parameters.
  • Protected components which are local variables, parameters, or constants.

I'm not sure if that parameter is actually meant to belong to the protected components, or whether it is meant to belong to the input formal parameters. In either case, the code looks invalid to me.

Should we rather open a ticket here?

comment:2 by Adrian Pop, 6 years ago

I will open a ticket there.

comment:4 by Adrian Pop, 6 years ago

I allowed this just to see the impact on the coverage test:
https://github.com/OpenModelica/OMCompiler/pull/2600
I will disable it later.

Note: See TracTickets for help on using tickets.