aboutsummaryrefslogtreecommitdiffstats
path: root/testsuite/gna/bug18351/18351.vhd
blob: 2797ce29ab478ff3c50be8bb483aa228a489fbde (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
entity PROBLEM is
end PROBLEM;

architecture BUG of PROBLEM is

  -- original testcase used std_logic_vector but other types suffer too
  type t_int_ptr is access integer; 

  function ISSUE_HERE return t_int_ptr is
  begin 
    return new integer; 
  end ISSUE_HERE;

  -- do functions with parameters work?
  function ISSUE_2(I : Integer) return t_int_ptr is
  variable Temp : t_int_ptr;
  begin 
    Temp := new integer; 
    Temp.all := I;
    return Temp;
  end ISSUE_2;

  function ISSUE_3 return t_int_ptr is
  variable Temp : t_int_ptr;
  begin 
    Temp := new integer; 
    Temp.all := 33;
    return Temp;
  end ISSUE_3;

  -- original testcase passed the result as param to a procedure
  -- so test passing parameters too
  procedure ANY_STUFF(param: in integer) is 
  begin
    report "Integer value " & integer'image(param) severity note;
  end procedure;

begin

  eval : process is
    variable X : t_int_ptr;
    variable Y : integer;
  begin
    X := ISSUE_HERE;
    ANY_STUFF(X.all);		-- Test case (1) : works
    --Y := ISSUE_2(55).all;  	-- Test case (2) : used to fail; works with first patch
    --ANY_STUFF(Y);
    Y := ISSUE_HERE.all; 	-- Test case (3) : fails
    ANY_STUFF(Y);
    ANY_STUFF(ISSUE_HERE.all);  -- Test case (4) : fails
    Y := ISSUE_3.all; 	-- Test case (5) : fails
    ANY_STUFF(Y);
    ANY_STUFF(ISSUE_3.all);  -- Test case (6) : fails
    wait;
  end process;   

end BUG;