Skip to content

Commit bec455a

Browse files
committed
CHC: update for new Goblint-Cil int/float variants
1 parent 98d0ac8 commit bec455a

File tree

11 files changed

+170
-34
lines changed

11 files changed

+170
-34
lines changed

CodeHawk/CHC/cchlib/cCHBasicTypes.mli

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -49,12 +49,19 @@ type ikind =
4949
| ILongLong (** [long long] (or [_int64] on Microsoft Visual C) *)
5050
| IULongLong (** [unsigned long long] (or [unsigned _int64] on Microsoft
5151
Visual C) *)
52+
| IInt128 (** added by Goblint-Cil *)
53+
| IUInt128 (** added by Goblint-Cil *)
54+
5255

5356
(** Various kinds of floating-point numbers*)
5457
type fkind =
5558
| FFloat (** [float] *)
5659
| FDouble (** [double] *)
5760
| FLongDouble (** [long double] *)
61+
| FComplexFloat
62+
| FComplexDouble
63+
| FComplexLongDouble
64+
5865

5966
type storage =
6067
| NoStorage
@@ -260,7 +267,14 @@ and asm_input_t = string option * string * exp (* name, constraint, exp *)
260267
and instr =
261268
| Set of lval * exp * location
262269
| Call of lval option * exp * exp list * location
263-
| Asm of attributes * int list * asm_output_t list * asm_input_t list * int list * location
270+
| VarDecl of varinfo * location
271+
| Asm of
272+
attributes
273+
* int list
274+
* asm_output_t list
275+
* asm_input_t list
276+
* int list
277+
* location
264278

265279
and location = {
266280
line : int ;

CodeHawk/CHC/cchlib/cCHBasicTypesXml.ml

Lines changed: 31 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@ open CHLanguage
3232
open CHPretty
3333

3434
(* chutil *)
35+
open CHLogger
3536
open CHPrettyUtil
3637
open CHXmlDocument
3738

@@ -241,28 +242,34 @@ let read_xml_asm_input_list (node:xml_element_int) : asm_input_t list =
241242
List.map read_xml_asm_input (node#getTaggedChildren "asminput")
242243

243244

244-
let read_xml_instruction (node:xml_element_int) : instr =
245+
let read_xml_instruction (node:xml_element_int) : instr option =
245246
let hasc = node#hasOneTaggedChild in
246247
let get = node#getAttribute in
247248
let getc = node#getTaggedChild in
248249
let read_list tag reader = if hasc tag then reader (getc tag) else [] in
249250
match get "itag" with
250251
| "set" ->
251-
Set (cd#read_xml_lval node,
252-
cd#read_xml_exp node,
253-
cdecls#read_xml_location node)
252+
Some (
253+
Set (cd#read_xml_lval node,
254+
cd#read_xml_exp node,
255+
cdecls#read_xml_location node))
254256
| "call" ->
255-
Call (cd#read_xml_lval_opt node,
256-
cd#read_xml_exp node,
257-
read_xml_exp_list (getc "args"),
258-
cdecls#read_xml_location node)
257+
Some (
258+
Call (cd#read_xml_lval_opt node,
259+
cd#read_xml_exp node,
260+
read_xml_exp_list (getc "args"),
261+
cdecls#read_xml_location node))
259262
| "asm" ->
260-
Asm (cd#read_xml_attributes node,
261-
read_list "templates" read_xml_string_index_list,
262-
read_list "asmoutputs" read_xml_asm_output_list,
263-
read_list "asminputs" read_xml_asm_input_list,
264-
read_list "registerclobbers" read_xml_string_index_list,
265-
cdecls#read_xml_location node)
263+
Some (
264+
Asm (cd#read_xml_attributes node,
265+
read_list "templates" read_xml_string_index_list,
266+
read_list "asmoutputs" read_xml_asm_output_list,
267+
read_list "asminputs" read_xml_asm_input_list,
268+
read_list "registerclobbers" read_xml_string_index_list,
269+
cdecls#read_xml_location node))
270+
271+
| "vardecl" -> None
272+
266273
| s -> raise (Invalid_enumeration ("instruction", s))
267274

268275

@@ -286,7 +293,16 @@ let read_xml_label_list (node:xml_element_int) : label list =
286293

287294

288295
let read_xml_instruction_list (node:xml_element_int) : instr list =
289-
List.map read_xml_instruction (node#getTaggedChildren "instr")
296+
let revinstrs =
297+
List.fold_left
298+
(fun acc n ->
299+
match read_xml_instruction n with
300+
| Some instr -> instr :: acc
301+
| _ ->
302+
let _ =
303+
chlog#add "ignoring vardecl instruction" (STR "No vardecl") in
304+
acc) [] (node#getTaggedChildren "instr") in
305+
List.rev revinstrs
290306

291307

292308
let rec read_xml_function_block (node:xml_element_int) : block =

CodeHawk/CHC/cchlib/cCHBasicTypesXml.mli

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -67,6 +67,6 @@ val read_xml_exp_option_list: ?tag:string -> xml_element_int -> exp option list
6767

6868
val read_xml_cfile: xml_element_int -> file
6969

70-
val read_xml_instruction: xml_element_int -> instr
70+
val read_xml_instruction: xml_element_int -> instr option
7171

7272
val read_xml_function_definition: xml_element_int -> fundec

CodeHawk/CHC/cchlib/cCHCodewalker.ml

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -105,7 +105,8 @@ object (self:_)
105105
List.iter (fun e -> self#walk_exp e) l;
106106
self#walk_location loc
107107
end
108-
| Asm (_,_,_,_,_,loc) -> self#walk_location loc
108+
| Asm (_, _, _, _, _, loc) -> self#walk_location loc
109+
| VarDecl (_, loc) -> self#walk_location loc
109110

110111
method walk_lval (l:lval) =
111112
begin

CodeHawk/CHC/cchlib/cCHLibTypes.mli

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -54,12 +54,18 @@ type machine_sizes_t = {
5454
sizeof_long : xpr_t;
5555

5656
sizeof_longlong : xpr_t;
57+
sizeof_int128 : xpr_t;
58+
5759
sizeof_ptr : xpr_t;
5860
sizeof_enum : xpr_t;
5961
sizeof_float : xpr_t;
6062
sizeof_double : xpr_t;
6163

6264
sizeof_longdouble : xpr_t;
65+
sizeof_complex_float: xpr_t;
66+
sizeof_complex_double: xpr_t;
67+
sizeof_complex_longdouble: xpr_t;
68+
6369
sizeof_void : xpr_t;
6470
sizeof_fun : xpr_t;
6571

@@ -69,12 +75,18 @@ type machine_sizes_t = {
6975
alignof_long : xpr_t;
7076

7177
alignof_longlong : xpr_t;
78+
alignof_int128 : xpr_t;
79+
7280
alignof_ptr : xpr_t;
7381
alignof_enum : xpr_t;
7482
alignof_float : xpr_t;
7583

7684
alignof_double : xpr_t;
7785
alignof_longdouble: xpr_t;
86+
alignof_complex_float: xpr_t;
87+
alignof_complex_double: xpr_t;
88+
alignof_complex_longdouble: xpr_t;
89+
7890
alignof_str : xpr_t;
7991
alignof_fun : xpr_t;
8092
alignof_aligned : xpr_t;

CodeHawk/CHC/cchlib/cCHMachineSizes.ml

Lines changed: 45 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -108,13 +108,15 @@ let ic2 = int_constant_expr 2
108108
let ic4 = int_constant_expr 4
109109
let ic8 = int_constant_expr 8
110110
let ic16 = int_constant_expr 16
111+
let ic32 = int_constant_expr 32
111112

112113

113114
let symbolic_sizes = {
114115
sizeof_short = mkvar "sizeof_short";
115116
sizeof_int = mkvar "sizeof_int";
116117
sizeof_bool = mkvar "sizeof_bool";
117118
sizeof_long = mkvar "sizeof_long";
119+
sizeof_int128 = mkvar "sizeof_int128";
118120

119121
sizeof_longlong = mkvar "sizeof_longlong";
120122
sizeof_ptr = mkvar "sizeof_ptr";
@@ -123,13 +125,18 @@ let symbolic_sizes = {
123125
sizeof_double = mkvar "sizeof_double";
124126

125127
sizeof_longdouble = mkvar "sizeof_longdouble";
128+
sizeof_complex_float = mkvar "sizeof_complex_float";
129+
sizeof_complex_double = mkvar "sizeof_complex_double";
130+
sizeof_complex_longdouble = mkvar "sizeof_complex_longdouble";
131+
126132
sizeof_void = mkvar "sizeof_void";
127133
sizeof_fun = mkvar "sizeof_fun";
128134

129135
alignof_short = mkvar "alignof_short";
130136
alignof_int = mkvar "alignof_int";
131137
alignof_bool = mkvar "alignof_bool";
132138
alignof_long = mkvar "alignof_long";
139+
alignof_int128 = mkvar "alignof_int128";
133140

134141
alignof_longlong = mkvar "alignof_longlong";
135142
alignof_ptr = mkvar "alignof_ptr";
@@ -138,74 +145,96 @@ let symbolic_sizes = {
138145

139146
alignof_double = mkvar "alignof_double";
140147
alignof_longdouble = mkvar "alignof_longdouble";
148+
alignof_complex_float = mkvar "alignof_complex_float";
149+
alignof_complex_double = mkvar "alignof_complex_double";
150+
alignof_complex_longdouble = mkvar "alignof_complex_longdouble";
151+
141152
alignof_str = mkvar "alignof_str";
142153
alignof_fun = mkvar "alignof_fun";
143154
alignof_aligned = mkvar "alignof_aligned"
144155
}
145156

146157

147-
let linux_64_machine_sizes = { (* sizes in bytes for linux server, from cil output *)
158+
(* sizes in bytes for linux server, from cil output *)
159+
let linux_64_machine_sizes = {
148160
sizeof_short = ic2;
149161
sizeof_int = ic4;
150162
sizeof_bool = ic1;
151163
sizeof_long = ic8;
164+
sizeof_int128 = ic16;
152165

153166
sizeof_longlong = ic8;
154167
sizeof_ptr = ic8;
155168
sizeof_enum = ic4;
156169
sizeof_float = ic4;
157170
sizeof_double = ic8;
158-
159171
sizeof_longdouble = ic16;
172+
sizeof_complex_float = ic8;
173+
sizeof_complex_double = ic16;
174+
sizeof_complex_longdouble = ic32;
175+
160176
sizeof_void = ic1;
161177
sizeof_fun = ic1;
162178

163179
alignof_short = ic2;
164180
alignof_int = ic4;
165181
alignof_bool = ic1;
166182
alignof_long = ic8;
183+
alignof_int128 = ic16;
167184

168185
alignof_longlong = ic8;
169186
alignof_ptr = ic8;
170187
alignof_enum = ic4;
171188
alignof_float = ic4;
172-
173189
alignof_double = ic8;
174190
alignof_longdouble = ic16;
191+
alignof_complex_float = ic8;
192+
alignof_complex_double = ic16;
193+
alignof_complex_longdouble = ic32;
194+
175195
alignof_str = ic1;
176196
alignof_fun = ic1;
177197
alignof_aligned = ic16
178198
}
179199

180200

181-
let linux_32_machine_sizes = { (* sizes in bytes for linux 32 bits, derived from 64 bits *)
201+
(* sizes in bytes for linux 32 bits, derived from 64 bits *)
202+
let linux_32_machine_sizes = {
182203
sizeof_short = ic2;
183204
sizeof_int = ic4;
184205
sizeof_bool = ic1;
185206
sizeof_long = ic4;
207+
sizeof_int128 = ic16;
186208

187209
sizeof_longlong = ic8;
188210
sizeof_ptr = ic4;
189211
sizeof_enum = ic4;
190212
sizeof_float = ic4;
191213
sizeof_double = ic8;
192-
193214
sizeof_longdouble = ic8;
215+
sizeof_complex_float = ic8;
216+
sizeof_complex_double = ic16;
217+
sizeof_complex_longdouble = ic16;
218+
194219
sizeof_void = ic1;
195220
sizeof_fun = ic1;
196221

197222
alignof_short = ic2;
198223
alignof_int = ic4;
199224
alignof_bool = ic1;
200225
alignof_long = ic4;
226+
alignof_int128 = ic16;
201227

202228
alignof_longlong = ic8;
203229
alignof_ptr = ic4;
204230
alignof_enum = ic4;
205231
alignof_float = ic4;
206-
207232
alignof_double = ic8;
208233
alignof_longdouble = ic8;
234+
alignof_complex_float = ic8;
235+
alignof_complex_double = ic16;
236+
alignof_complex_longdouble = ic16;
237+
209238
alignof_str = ic1;
210239
alignof_fun = ic1;
211240
alignof_aligned = ic8
@@ -217,29 +246,37 @@ let linux_16_machine_sizes = {
217246
sizeof_int = ic2;
218247
sizeof_bool = ic1;
219248
sizeof_long = ic4;
249+
sizeof_int128 = ic16;
220250

221251
sizeof_longlong = ic4;
222252
sizeof_ptr = ic2;
223253
sizeof_enum = ic2;
224254
sizeof_float = ic2;
225255
sizeof_double = ic4;
226-
227256
sizeof_longdouble = ic4;
257+
sizeof_complex_float = ic4;
258+
sizeof_complex_double = ic8;
259+
sizeof_complex_longdouble = ic8;
260+
228261
sizeof_void = ic1;
229262
sizeof_fun = ic1;
230263

231264
alignof_short = ic2;
232265
alignof_int = ic2;
233266
alignof_bool = ic1;
234267
alignof_long = ic4;
268+
alignof_int128 = ic16;
235269

236270
alignof_longlong = ic4;
237271
alignof_ptr = ic2;
238272
alignof_enum = ic2;
239273
alignof_float = ic2;
240-
241274
alignof_double = ic4;
242275
alignof_longdouble = ic4;
276+
alignof_complex_float = ic4;
277+
alignof_complex_double = ic8;
278+
alignof_complex_longdouble = ic8;
279+
243280
alignof_str = ic1;
244281
alignof_fun = ic1;
245282
alignof_aligned = ic4

CodeHawk/CHC/cchlib/cCHSumTypeSerializer.ml

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -56,13 +56,21 @@ let ikind_mfts: ikind mfts_int =
5656
(ILong, "ilong");
5757
(IULong, "iulong");
5858
(ILongLong, "ilonglong");
59-
(IULongLong, "iulonglong")]
59+
(IULongLong, "iulonglong");
60+
(IInt128, "int128_t");
61+
(IUInt128, "uint128_t")
62+
]
6063

6164

6265
let fkind_mfts: fkind mfts_int =
6366
mk_mfts
6467
"fkind"
65-
[(FFloat, "float"); (FDouble, "fdouble"); (FLongDouble, "flongdouble")]
68+
[(FFloat, "float");
69+
(FDouble, "fdouble");
70+
(FLongDouble, "flongdouble");
71+
(FComplexFloat, "fcomplexfloat");
72+
(FComplexDouble, "fcomplexdouble");
73+
(FComplexLongDouble, "fcomplexlongdouble")]
6674

6775

6876
let unop_mfts: unop mfts_int =
@@ -324,8 +332,9 @@ object
324332
| Set _ -> "set"
325333
| Call _ -> "call"
326334
| Asm _ -> "asm"
335+
| VarDecl _ -> "vardecl"
327336

328-
method! tags = ["asm"; "call"; "set"]
337+
method! tags = ["asm"; "call"; "set"; "vardecl"]
329338

330339
end
331340

0 commit comments

Comments
 (0)