Subprogram overloading should consider object class of parameters
Is your capability/feature request related to a problem?
As explained by @JimLewis here, currently subprograms are only defined uniquely by direction, type, and name of parameter. The object class of the parameter is not considered in the definition of the subprogram. As a result, procedures cannot be overloaded to take either a variable or a signal and odd solutions are required to work around.
Describe the solution you'd like
I would like to be able to do something like this:
procedure test(variable value : out std_logic) is
begin
value := '1';
end procedure;
procedure test(signal value : out std_logic) is
variable value_v : std_logic;
begin
test(value_v);
value <= value_v;
end procedure;
This way the external world can use the "same" procedure regardless of whether it is a signal or a variable.
Describe alternatives you've considered
Several workarounds exist that rely on slight naming differences in either the procedure name or the name of its parameters. Currently, we do something like this:
procedure test(variable value : out std_logic) is
begin
value := '1';
end procedure;
procedure tests(signal value : out std_logic) is
variable value_v : std_logic;
begin
test(value_v);
value <= value_v;
end procedure;
by renaming the procedure it is now unique, but the caller has to know which to use.
Additional context
At least for me, this mostly only applies in the context of testbench procedures and is less important for synthesizable rtl.