@@ -55,11 +55,42 @@ package body Driver is
55
55
procedure Follow_Type_Declarations (Old_Table : Symbol_Table;
56
56
New_Table : in out Symbol_Table);
57
57
58
+ procedure Add_Malloc_Symbol ;
59
+
60
+ procedure Add_Malloc_Symbol is
61
+ Malloc_Name : constant String := " malloc" ;
62
+ Malloc_Params : constant Irep := New_Irep (I_Parameter_List);
63
+ Size_Param : constant Irep :=
64
+ Create_Fun_Parameter (Fun_Name => Malloc_Name,
65
+ Param_Name => " size" ,
66
+ Param_Type =>
67
+ Make_Symbol_Type (Identifier => " __CPROVER_size_t" ),
68
+ Param_List => Malloc_Params,
69
+ A_Symbol_Table => Global_Symbol_Table);
70
+ Malloc_Type : constant Irep :=
71
+ Make_Code_Type (Parameters => Malloc_Params,
72
+ Ellipsis => False,
73
+ Return_Type => Make_Pointer_Type (Make_Void_Type),
74
+ Inlined => False,
75
+ Knr => False);
76
+ Malloc_Symbol : Symbol;
77
+ begin
78
+ if Kind (Size_Param) = I_Code_Parameter then
79
+ Malloc_Symbol :=
80
+ New_Function_Symbol_Entry (Name => Malloc_Name,
81
+ Symbol_Type => Malloc_Type,
82
+ Value => Ireps.Empty,
83
+ A_Symbol_Table => Global_Symbol_Table);
84
+ pragma Assert (Kind (Malloc_Symbol.SymType) = I_Code_Type);
85
+ end if ;
86
+ end Add_Malloc_Symbol ;
87
+
58
88
procedure GNAT_To_Goto (GNAT_Root : Node_Id)
59
89
is
60
90
begin
61
91
Translate_Standard_Types;
62
92
Add_CProver_Internal_Symbols;
93
+ Add_Malloc_Symbol;
63
94
Translate_Compilation_Unit (GNAT_Root);
64
95
end GNAT_To_Goto ;
65
96
@@ -398,6 +429,20 @@ package body Driver is
398
429
Global_Symbol_Table.Insert (Builtin.Name, Builtin);
399
430
end Add_Universal_Integer ;
400
431
432
+ procedure Add_CProver_Size_T ;
433
+ procedure Add_CProver_Size_T is
434
+ Builtin : Symbol;
435
+ Type_Irep : constant Irep := New_Irep (I_Unsignedbv_Type);
436
+ begin
437
+ Set_Width (Type_Irep, 64 );
438
+ Builtin.Name := Intern (" __CPROVER_size_t" );
439
+ Builtin.PrettyName := Builtin.Name;
440
+ Builtin.BaseName := Builtin.Name;
441
+ Builtin.SymType := Type_Irep;
442
+ Builtin.IsType := True;
443
+
444
+ Global_Symbol_Table.Insert (Builtin.Name, Builtin);
445
+ end Add_CProver_Size_T ;
401
446
begin
402
447
-- Add primitive types to the symtab
403
448
for Standard_Type in S_Types'Range loop
@@ -458,6 +503,7 @@ package body Driver is
458
503
end loop ;
459
504
Add_Universal_Integer;
460
505
Add_Standard_String;
506
+ Add_CProver_Size_T;
461
507
end Translate_Standard_Types ;
462
508
463
509
procedure Add_CProver_Internal_Symbols is
0 commit comments