diff --git a/ivette/src/frama-c/kernel/Properties.tsx b/ivette/src/frama-c/kernel/Properties.tsx index 39813c1b13176c8964554fe4d34bbd791c9c6a12..5034f8671cc40ccfce104001c57ca77c4ff9d56f 100644 --- a/ivette/src/frama-c/kernel/Properties.tsx +++ b/ivette/src/frama-c/kernel/Properties.tsx @@ -97,7 +97,6 @@ const DEFAULTS: { [key: string]: boolean } = { 'alarms.special_float': true, 'alarms.float_to_int': true, 'alarms.function_pointer': true, - 'alarms.union_initialization': true, 'alarms.bool_value': true, 'eva.priority_only': false, 'eva.data_tainted_only': false, @@ -192,8 +191,6 @@ function filterAlarm(alarm: string | undefined): boolean { case 'is_nan': return filter('alarms.special_float'); case 'float_to_int': return filter('alarms.float_to_int'); case 'function_pointer': return filter('alarms.function_pointer'); - case 'initialization_of_union': - return filter('alarms.union_initialization'); case 'bool_value': return filter('alarms.bool_value'); default: return false; } @@ -466,7 +463,6 @@ function PropertyFilter(): JSX.Element { <CheckField label="Differing blocks" path="alarms.differing_blocks" /> <CheckField label="Separations" path="alarms.separation" /> <CheckField label="Overlaps" path="alarms.overlap" /> - <CheckField label="Initialization of unions" path="alarms.union_initialization" /> </Section> <Section label="Eva"> <CheckField diff --git a/ivette/src/frama-c/kernel/api/properties/index.ts b/ivette/src/frama-c/kernel/api/properties/index.ts index 63c04bd149ee1e24a4d033602d8db3d7c79cdb4a..fbbd717805ee31d7b90f196bd81c663ee1d49bcd 100644 --- a/ivette/src/frama-c/kernel/api/properties/index.ts +++ b/ivette/src/frama-c/kernel/api/properties/index.ts @@ -215,8 +215,6 @@ export enum alarms { is_nan = 'is_nan', /** Pointer to a function with non-compatible type */ function_pointer = 'function_pointer', - /** Uninitialized memory read of union */ - initialization_of_union = 'initialization_of_union', /** Trap representation of a _Bool lvalue */ bool_value = 'bool_value', } diff --git a/src/kernel_services/ast_data/alarms.ml b/src/kernel_services/ast_data/alarms.ml index 449379376039b8999b09781080b6a69c419b57cf..99658f1077bb93a12ba10c08a4b8eb72c4d70a5c 100644 --- a/src/kernel_services/ast_data/alarms.ml +++ b/src/kernel_services/ast_data/alarms.ml @@ -63,12 +63,11 @@ type alarm = | Is_nan_or_infinite of exp * fkind | Is_nan of exp * fkind | Function_pointer of exp * exp list option - | Uninitialized_union of lval list | Invalid_bool of lval (* If you add one constructor to this type, make sure to add a dummy value in the 'reprs' value below, and increase 'nb_alarms' *) -let nb_alarm_constructors = 18 +let nb_alarm_constructors = 17 module D = Datatype.Make_with_collections @@ -96,7 +95,6 @@ module D = Is_nan_or_infinite (e, FFloat); Is_nan (e, FFloat); Function_pointer (e, None); - Uninitialized_union [ lv ]; Invalid_bool lv; ] @@ -117,8 +115,7 @@ module D = | Differing_blocks _ -> 13 | Dangling _ -> 14 | Function_pointer _ -> 15 - | Uninitialized_union _ -> 16 - | Invalid_bool _ -> 17 + | Invalid_bool _ -> 16 let () = (* Lightweight checks *) for i = 0 to nb_alarm_constructors - 1 do @@ -170,17 +167,6 @@ module D = let n = Lval.compare lv11 lv21 in if n = 0 then Lval.compare lv12 lv22 else n | Uninitialized lv1, Uninitialized lv2 -> Lval.compare lv1 lv2 - | Uninitialized_union llv1, Uninitialized_union llv2 -> - let len1 = List.length llv1 in - let len2 = List.length llv2 in - begin - match compare len1 len2 with - | 0 -> List.fold_left2 (fun acc lv1 lv2 -> - if acc <> 0 then acc - else Lval.compare lv1 lv2 - ) 0 llv1 llv2 - | _ -> assert false - end | Dangling lv1, Dangling lv2 -> Lval.compare lv1 lv2 | Differing_blocks (e11, e12), Differing_blocks (e21, e22) -> let n = Exp.compare e11 e21 in @@ -196,7 +182,7 @@ module D = Overflow _ | Not_separated _ | Overlap _ | Uninitialized _ | Dangling _ | Is_nan_or_infinite _ | Is_nan _ | Float_to_int _ | Differing_blocks _ | Function_pointer _ | - Uninitialized_union _ | Invalid_bool _) + Invalid_bool _) -> let n = nb a1 - nb a2 in assert (n <> 0); @@ -234,8 +220,6 @@ module D = | Uninitialized lv -> Hashtbl.hash (nb a, Lval.hash lv) | Dangling lv -> Hashtbl.hash (nb a, Lval.hash lv) | Function_pointer (e, _) -> Hashtbl.hash (nb a, Exp.hash e) - | Uninitialized_union llv -> - Hashtbl.hash (nb a, List.map Lval.hash llv) | Invalid_bool lv -> Hashtbl.hash (nb a, Lval.hash lv) let structural_descr = Structural_descr.t_abstract @@ -300,10 +284,6 @@ module D = Format.fprintf fmt "Unspecified(@[%a@])" Lval.pretty lv | Function_pointer (e, _) -> Format.fprintf fmt "Function_pointer(@[%a@])" Exp.pretty e - | Uninitialized_union llv -> - Format.fprintf fmt "Uninitialized_union(@[[%a]@])" - (Format.pp_print_list ~pp_sep:(fun fmt () -> Format.fprintf fmt "; ") Lval.pretty) - llv | Invalid_bool lv -> Format.fprintf fmt "Invalid_bool(@[%a@])" Lval.pretty lv @@ -412,7 +392,6 @@ let get_name = function | Is_nan _ -> "is_nan" | Float_to_int _ -> "float_to_int" | Function_pointer _ -> "function_pointer" - | Uninitialized_union _ -> "initialization_of_union" | Invalid_bool _ -> "bool_value" let get_short_name = function @@ -436,7 +415,6 @@ let get_description = function | Is_nan _ -> "NaN floating-point value" | Float_to_int _ -> "Overflow in float to int conversion" | Function_pointer _ -> "Pointer to a function with non-compatible type" - | Uninitialized_union _ -> "Uninitialized memory read of union" | Invalid_bool _ -> "Trap representation of a _Bool lvalue" @@ -656,19 +634,6 @@ let create_predicate ?(loc=Location.unknown) alarm = let t = Logic_utils.expr_to_term e in Logic_const.(pvalid_function ~loc t) - | Uninitialized_union llv -> - (* \initialized(lv_1) || ... || \initialized(lv_n) *) - let make_lval_predicate lv = - let e = Cil.mkAddrOrStartOf ~loc lv in - let t = Logic_utils.expr_to_term e in - Logic_const.pinitialized ~loc (Logic_const.here_label, t) - in - List.fold_left (fun acc lv -> - Logic_const.por ~loc (acc, make_lval_predicate lv) - ) - (make_lval_predicate (List.hd llv)) - (List.tl llv) - | Invalid_bool lv -> let e = Cil.new_exp ~loc (Lval lv) in let t = Logic_utils.expr_to_term ~coerce:true e in diff --git a/src/kernel_services/ast_data/alarms.mli b/src/kernel_services/ast_data/alarms.mli index f897a2c70f2db04252326a3d18772c0572be70a3..fdb3b567ec95078824a15f287674661da96e5fe9 100644 --- a/src/kernel_services/ast_data/alarms.mli +++ b/src/kernel_services/ast_data/alarms.mli @@ -63,7 +63,6 @@ type alarm = (** the type of the pointer is compatible with the type of the pointed function (first argument). The second argument is the list of the arguments of the call. *) - | Uninitialized_union of lval list | Invalid_bool of lval (** Trap representation of a _Bool variable. *) include Datatype.S_with_collections with type t = alarm diff --git a/src/plugins/dive/build.ml b/src/plugins/dive/build.ml index cfb1120e5c590dfb676d541090bd603185333436..6116da7e18d2b5b186d55d1727ba695d59240969 100644 --- a/src/plugins/dive/build.ml +++ b/src/plugins/dive/build.ml @@ -76,7 +76,7 @@ struct in_exp e1 @ in_exp e2 | Memory_access (lval, _) -> in_lval lval | Not_separated _ | Overlap _ - | Uninitialized _ | Dangling _ | Uninitialized_union _ -> [] + | Uninitialized _ | Dangling _ -> [] | Invalid_bool lv -> [lv] end diff --git a/src/plugins/eva/alarmset.ml b/src/plugins/eva/alarmset.ml index 121f914f5540803032a567603cb63efcaebd2c03..d902c0d852f9830c0c9a1d85c67b90aa88a1a839 100644 --- a/src/plugins/eva/alarmset.ml +++ b/src/plugins/eva/alarmset.ml @@ -366,9 +366,6 @@ let emit_alarm kinstr alarm (status:status) = | Alarms.Function_pointer _ -> register_alarm "pointer to function with incompatible type" - | Alarms.Uninitialized_union _ -> - register_alarm "accessing uninitialized union" - | Alarms.Invalid_bool _ -> register_alarm "trap representation of a _Bool lvalue" @@ -398,8 +395,6 @@ let height_alarm = let open Eva_utils in function | _ -> false in if trivial then height_expr e else height_expr e + 1 - | Alarms.Uninitialized_union llv -> - List.fold_left max 0 (List.map height_lval llv) let cmp a1 a2 = Datatype.Int.compare (height_alarm (fst a1)) (height_alarm (fst a2)) @@ -456,7 +451,6 @@ let warn_alarm warn_mode = function | Alarms.Not_separated _ | Alarms.Overlap _ | Alarms.Function_pointer _ - | Alarms.Uninitialized_union _ | Alarms.Invalid_bool _ -> warn_mode.others ()