From 21337c8e22249221c78e8963cd3b43942bed4b06 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David=20B=C3=BChler?= <david.buhler@cea.fr> Date: Tue, 16 Apr 2024 20:33:27 +0200 Subject: [PATCH] [kernel] Removes old impact pragma (now replaced by an ACSL extension). --- src/kernel_internals/parsing/logic_parser.mly | 10 ---------- src/kernel_services/analysis/logic_deps.ml | 5 ++--- src/kernel_services/ast_data/cil_types.ml | 6 ------ src/kernel_services/ast_printing/cil_printer.ml | 8 -------- .../ast_printing/cil_types_debug.ml | 6 ------ .../ast_printing/cil_types_debug.mli | 2 -- src/kernel_services/ast_printing/logic_print.ml | 6 ------ src/kernel_services/ast_queries/ast_diff.ml | 8 -------- src/kernel_services/ast_queries/cil.ml | 11 ----------- src/kernel_services/ast_queries/cil.mli | 1 - src/kernel_services/ast_queries/logic_typing.ml | 7 ------- src/kernel_services/ast_queries/logic_utils.ml | 17 ++--------------- src/kernel_services/ast_queries/logic_utils.mli | 2 -- src/kernel_services/parsetree/logic_ptree.ml | 6 ------ src/plugins/impact/register.ml | 7 ++++--- src/plugins/metrics/metrics_pivot.ml | 1 - 16 files changed, 8 insertions(+), 95 deletions(-) diff --git a/src/kernel_internals/parsing/logic_parser.mly b/src/kernel_internals/parsing/logic_parser.mly index 79d29dce4a3..98c190c409a 100644 --- a/src/kernel_internals/parsing/logic_parser.mly +++ b/src/kernel_internals/parsing/logic_parser.mly @@ -1475,7 +1475,6 @@ beg_pragma_or_code_annotation: pragma_or_code_annotation: | slice_pragma { APragma (Slice_pragma $1) } -| impact_pragma { APragma (Impact_pragma $1) } | code_annotation { $1 [] } ; @@ -1527,15 +1526,6 @@ slice_pragma: else raise (Not_well_formed (loc $sloc, "Unknown slice pragma")) } ; -impact_pragma: -| IMPACT PRAGMA any_identifier lexpr SEMICOLON - { if $3 = "expr" then IPexpr $4 - else raise (Not_well_formed (loc $sloc, "Unknown impact pragma")) } -| IMPACT PRAGMA any_identifier SEMICOLON - { if $3 = "stmt" then IPstmt - else raise (Not_well_formed (loc $sloc, "Unknown impact pragma")) } -; - /*** declarations and logical definitions ***/ decl_list: diff --git a/src/kernel_services/analysis/logic_deps.ml b/src/kernel_services/analysis/logic_deps.ml index d416534d0ac..3eae6d298b6 100644 --- a/src/kernel_services/analysis/logic_deps.ml +++ b/src/kernel_services/analysis/logic_deps.ml @@ -452,7 +452,7 @@ let get_zone_from_annot a (ki,kf) loop_body_opt results = add_results_from_pred ctx results pred in match a.annot_content with - | APragma (Slice_pragma (SPexpr term) | Impact_pragma (IPexpr term)) -> + | APragma (Slice_pragma (SPexpr term)) -> results |> (* to preserve the interpretation of the pragma *) get_zone_from_term ki term |> @@ -461,7 +461,7 @@ let get_zone_from_annot a (ki,kf) loop_body_opt results = | APragma (Slice_pragma SPctrl) -> (* to select the reachability of the pragma *) add_ctrl_pragma ki results - | APragma (Slice_pragma SPstmt | Impact_pragma IPstmt) -> + | APragma (Slice_pragma SPstmt) -> (* to preserve the effect of the statement *) add_stmt_pragma ki results | AAssert (_behav,pred) -> @@ -580,7 +580,6 @@ let code_annot_filter annot ~threat ~user_assert ~slicing_pragma ~loop_inv ~loop | AInvariant(_,false,_) -> others | AAllocation _ -> others | AAssigns _ -> others - | APragma (Impact_pragma _) -> others | AStmtSpec _ | AExtended _ (* TODO *) -> false diff --git a/src/kernel_services/ast_data/cil_types.ml b/src/kernel_services/ast_data/cil_types.ml index 185a7fa68fe..7a75b1ed306 100644 --- a/src/kernel_services/ast_data/cil_types.ml +++ b/src/kernel_services/ast_data/cil_types.ml @@ -1743,15 +1743,9 @@ and slice_pragma = | SPctrl | SPstmt -(** Pragmas for the impact plugin of Frama-C. *) -and impact_pragma = - | IPexpr of term - | IPstmt - (** The various kinds of pragmas. *) and pragma = | Slice_pragma of slice_pragma - | Impact_pragma of impact_pragma (** all annotations that can be found in the code. This type shares the name of its constructors with diff --git a/src/kernel_services/ast_printing/cil_printer.ml b/src/kernel_services/ast_printing/cil_printer.ml index 31ead251dbc..c266a037d23 100644 --- a/src/kernel_services/ast_printing/cil_printer.ml +++ b/src/kernel_services/ast_printing/cil_printer.ml @@ -3185,10 +3185,6 @@ class cil_printer () = object (self) | SPctrl -> Format.pp_print_string fmt "ctrl" | SPstmt -> Format.pp_print_string fmt "stmt" - method private impact_pragma fmt = function - | IPexpr t -> fprintf fmt "expr @[%a@]" self#term t - | IPstmt -> Format.pp_print_string fmt "stmt" - (* TODO: add the annot ID in debug mode?*) method code_annotation fmt ca = let pp_for_behavs fmt l = @@ -3209,10 +3205,6 @@ class cil_printer () = object (self) fprintf fmt "@[%a@ %a;@]" self#pp_acsl_keyword "slice pragma" self#slice_pragma sp - | APragma (Impact_pragma sp) -> - fprintf fmt "@[%a@ %a;@]" - self#pp_acsl_keyword "impact pragma" - self#impact_pragma sp | AStmtSpec(for_bhv, spec) -> fprintf fmt "@[<hv 2>%a%a@]" pp_for_behavs for_bhv diff --git a/src/kernel_services/ast_printing/cil_types_debug.ml b/src/kernel_services/ast_printing/cil_types_debug.ml index f5892672e43..cae80c9951b 100644 --- a/src/kernel_services/ast_printing/cil_types_debug.ml +++ b/src/kernel_services/ast_printing/cil_types_debug.ml @@ -934,15 +934,9 @@ and pp_slice_pragma fmt = function | SPctrl -> Format.fprintf fmt "SPctrl" | SPstmt -> Format.fprintf fmt "SPstmt" -and pp_impact_pragma fmt = function - | IPexpr(term) -> Format.fprintf fmt "IPexpr(%a)" pp_term term - | IPstmt -> Format.fprintf fmt "IPstmt" - and pp_pragma fmt = function | Slice_pragma(term) -> Format.fprintf fmt "Slice_pragma(%a)" pp_slice_pragma term - | Impact_pragma(term) -> - Format.fprintf fmt "Impact_pragma(%a)" pp_impact_pragma term and pp_code_annotation_node fmt = function | AAssert(string_list,p) -> diff --git a/src/kernel_services/ast_printing/cil_types_debug.mli b/src/kernel_services/ast_printing/cil_types_debug.mli index 7cc180218f3..b52279be3ea 100644 --- a/src/kernel_services/ast_printing/cil_types_debug.mli +++ b/src/kernel_services/ast_printing/cil_types_debug.mli @@ -142,8 +142,6 @@ val pp_termination_kind : Format.formatter -> Cil_types.termination_kind -> unit val pp_slice_pragma : Format.formatter -> Cil_types.slice_pragma -> unit -val pp_impact_pragma : - Format.formatter -> Cil_types.impact_pragma -> unit val pp_pragma : Format.formatter -> Cil_types.pragma -> unit val pp_code_annotation_node : diff --git a/src/kernel_services/ast_printing/logic_print.ml b/src/kernel_services/ast_printing/logic_print.ml index 8eb0730f39d..eb5658c92af 100644 --- a/src/kernel_services/ast_printing/logic_print.ml +++ b/src/kernel_services/ast_printing/logic_print.ml @@ -456,15 +456,9 @@ let print_slice_pragma fmt p = | SPctrl -> pp_print_string fmt "ctrl" | SPstmt -> pp_print_string fmt "stmt" -let print_impact_pragma fmt p = - match p with - | IPexpr e -> fprintf fmt "expr@ %a" print_lexpr e - | IPstmt -> pp_print_string fmt "stmt" - let print_pragma fmt p = match p with | Slice_pragma p -> fprintf fmt "slice@ pragma@ %a;" print_slice_pragma p - | Impact_pragma p -> fprintf fmt "impact@ pragma@ %a;" print_impact_pragma p let print_extension fmt (name, ext) = fprintf fmt "%s %a" name (pp_list ~sep:",@ " print_lexpr) ext diff --git a/src/kernel_services/ast_queries/ast_diff.ml b/src/kernel_services/ast_queries/ast_diff.ml index af74c4dd1fe..2b39631d71b 100644 --- a/src/kernel_services/ast_queries/ast_diff.ml +++ b/src/kernel_services/ast_queries/ast_diff.ml @@ -720,17 +720,9 @@ and is_same_slice_pragma p p' env = | SPstmt, SPstmt -> true | (SPexpr _ | SPctrl | SPstmt), _ -> false -and is_same_impact_pragma p p' env = - match p, p' with - | IPexpr t, IPexpr t' -> is_same_term t t' env - | IPstmt, IPstmt -> true - | (IPexpr _ | IPstmt), _ -> false - and is_same_pragma p p' env = match p,p' with | Slice_pragma p, Slice_pragma p' -> is_same_slice_pragma p p' env - | Impact_pragma p, Impact_pragma p' -> is_same_impact_pragma p p' env - | (Slice_pragma _ | Impact_pragma _), _ -> false and are_same_behaviors bhvs bhvs' env = let treat_one_behavior acc b = diff --git a/src/kernel_services/ast_queries/cil.ml b/src/kernel_services/ast_queries/cil.ml index a35aaa54e6c..e784e979278 100644 --- a/src/kernel_services/ast_queries/cil.ml +++ b/src/kernel_services/ast_queries/cil.ml @@ -875,7 +875,6 @@ class type cilVisitor = object allocation -> allocation visitAction method vslice_pragma: slice_pragma -> slice_pragma visitAction - method vimpact_pragma: impact_pragma -> impact_pragma visitAction method vdeps: deps -> deps visitAction @@ -1010,7 +1009,6 @@ class internal_genericCilVisitor current_func behavior queue: cilVisitor = method vallocation _s = DoChildren method vslice_pragma _ = DoChildren - method vimpact_pragma _ = DoChildren method vdeps _ = DoChildren @@ -1844,12 +1842,6 @@ and childrenSlicePragma vis p = let t' = visitCilTerm vis t in if t' != t then SPexpr t' else p | SPctrl | SPstmt -> p -and visitCilImpactPragma vis p = - doVisitCil vis id vis#vimpact_pragma childrenImpactPragma p - -and childrenImpactPragma vis p = match p with - | IPexpr t -> let t' = visitCilTerm vis t in if t' != t then IPexpr t' else p - | IPstmt -> p and childrenModelInfo vis m = let field_type = visitCilLogicType vis m.mi_field_type in @@ -1963,9 +1955,6 @@ and childrenCodeAnnot vis ca = let p' = vPred p in if p' != p then change_content (AAssert (behav,p')) else ca - | APragma (Impact_pragma t) -> - let t' = visitCilImpactPragma vis t in - if t' != t then change_content (APragma (Impact_pragma t')) else ca | APragma (Slice_pragma t) -> let t' = visitCilSlicePragma vis t in if t' != t then change_content (APragma (Slice_pragma t')) else ca diff --git a/src/kernel_services/ast_queries/cil.mli b/src/kernel_services/ast_queries/cil.mli index a7a2f7f0eaa..c43820f0bec 100644 --- a/src/kernel_services/ast_queries/cil.mli +++ b/src/kernel_services/ast_queries/cil.mli @@ -1919,7 +1919,6 @@ class type cilVisitor = object (** @since Oxygen-20120901 *) method vslice_pragma: slice_pragma -> slice_pragma visitAction - method vimpact_pragma: impact_pragma -> impact_pragma visitAction method vdeps: deps -> deps visitAction method vfrom: from -> from visitAction diff --git a/src/kernel_services/ast_queries/logic_typing.ml b/src/kernel_services/ast_queries/logic_typing.ml index 7fbbc120b54..ace04011a2d 100644 --- a/src/kernel_services/ast_queries/logic_typing.ml +++ b/src/kernel_services/ast_queries/logic_typing.ml @@ -3839,10 +3839,6 @@ struct | SPctrl -> Cil_types.SPctrl | SPstmt -> Cil_types.SPstmt - let impact_pragma env = function - IPexpr t -> Cil_types.IPexpr (term env t) - | IPstmt -> Cil_types.IPstmt - let code_annot_env () = let env = append_here_label (append_pre_label (append_init_label (Lenv.empty()))) in @@ -3860,9 +3856,6 @@ struct let p = predicate (code_annot_env()) p in let p = Logic_const.toplevel_predicate ~kind p in Cil_types.AAssert(behav,p) - | APragma (Impact_pragma sp) -> - Cil_types.APragma - (Cil_types.Impact_pragma (impact_pragma (code_annot_env()) sp)) | APragma (Slice_pragma sp) -> Cil_types.APragma (Cil_types.Slice_pragma (slice_pragma (code_annot_env()) sp)) diff --git a/src/kernel_services/ast_queries/logic_utils.ml b/src/kernel_services/ast_queries/logic_utils.ml index 690e9c8def3..c72b5dac60a 100644 --- a/src/kernel_services/ast_queries/logic_utils.ml +++ b/src/kernel_services/ast_queries/logic_utils.ml @@ -714,7 +714,7 @@ let is_trivially_true p = let is_annot_next_stmt c = match c.annot_content with - | AStmtSpec _ | APragma (Slice_pragma SPstmt | Impact_pragma IPstmt) -> true + | AStmtSpec _ | APragma (Slice_pragma SPstmt) -> true | AExtended(_,is_loop,{ext_name}) -> let warn_not_a_code_annot () = Kernel.( @@ -730,7 +730,6 @@ let is_annot_next_stmt c = | AAssert _ | AInvariant _ | AVariant _ | AAssigns _ | AAllocation _ | APragma (Slice_pragma (SPctrl | SPexpr _)) - | APragma (Impact_pragma (IPexpr _)) -> false let rec add_attribute_glob_annot a g = @@ -1182,17 +1181,9 @@ let is_same_slice_pragma p1 p2 = | SPctrl, SPctrl | SPstmt, SPstmt -> true | (SPexpr _ | SPctrl | SPstmt), _ -> false -let is_same_impact_pragma p1 p2 = - match p1,p2 with - | IPexpr t1, IPexpr t2 -> is_same_term t1 t2 - | IPstmt, IPstmt -> true - | (IPexpr _ | IPstmt), _ -> false - let is_same_pragma p1 p2 = match p1,p2 with | Slice_pragma p1, Slice_pragma p2 -> is_same_slice_pragma p1 p2 - | Impact_pragma p1, Impact_pragma p2 -> is_same_impact_pragma p1 p2 - | (Slice_pragma _ | Impact_pragma _), _ -> false let rec is_same_extension x1 x2 = Datatype.String.equal x1.ext_name x2.ext_name && @@ -2273,9 +2264,6 @@ let is_pragma ca = let is_slice_pragma ca = match ca.annot_content with APragma (Slice_pragma _) -> true | _ -> false -let is_impact_pragma ca = - match ca.annot_content with APragma (Impact_pragma _) -> true | _ -> false - let is_loop_extension ca = match ca.annot_content with AExtended (_,is_loop,_) -> is_loop | _ -> false @@ -2291,8 +2279,7 @@ let is_trivial_annotation a = -> false let is_property_pragma = function - | Slice_pragma (SPexpr _ | SPctrl | SPstmt) - | Impact_pragma (IPexpr _ | IPstmt) -> false + | Slice_pragma (SPexpr _ | SPctrl | SPstmt) -> false (* If at some time a pragma becomes something which should be proven, update the pragma-related code in gui/property_navigator.ml *) diff --git a/src/kernel_services/ast_queries/logic_utils.mli b/src/kernel_services/ast_queries/logic_utils.mli index 62ace3c9ccf..48436fb2286 100644 --- a/src/kernel_services/ast_queries/logic_utils.mli +++ b/src/kernel_services/ast_queries/logic_utils.mli @@ -374,7 +374,6 @@ val is_same_logic_type_def : val is_same_logic_type_info : logic_type_info -> logic_type_info -> bool val is_same_slice_pragma : slice_pragma -> slice_pragma -> bool -val is_same_impact_pragma : impact_pragma -> impact_pragma -> bool val is_same_pragma : pragma -> pragma -> bool val is_same_code_annotation : code_annotation -> code_annotation -> bool val is_same_global_annotation : global_annotation -> global_annotation -> bool @@ -460,7 +459,6 @@ val is_allocation: code_annotation -> bool val is_assigns : code_annotation -> bool val is_pragma : code_annotation -> bool val is_slice_pragma : code_annotation -> bool -val is_impact_pragma : code_annotation -> bool val is_loop_annot : code_annotation -> bool val is_trivial_annotation : code_annotation -> bool diff --git a/src/kernel_services/parsetree/logic_ptree.ml b/src/kernel_services/parsetree/logic_ptree.ml index aeb6da19615..a5e76ba1bad 100644 --- a/src/kernel_services/parsetree/logic_ptree.ml +++ b/src/kernel_services/parsetree/logic_ptree.ml @@ -326,15 +326,9 @@ and slice_pragma = | SPctrl | SPstmt -(** Pragmas for the impact plugin of Frama-C. *) -and impact_pragma = - | IPexpr of lexpr - | IPstmt - (** The various kinds of pragmas. *) and pragma = | Slice_pragma of slice_pragma - | Impact_pragma of impact_pragma (** all annotations that can be found in the code. This type shares the name of its constructors with {!Cil_types.code_annotation_node}. *) diff --git a/src/plugins/impact/register.ml b/src/plugins/impact/register.ml index 5db8ea3d06d..ba41d38ea72 100644 --- a/src/plugins/impact/register.ml +++ b/src/plugins/impact/register.ml @@ -116,8 +116,9 @@ let is_impact_annot code_annot = let compute_annots () = Ast.compute (); - (* fill [pragmas] with all the pragmas of all the selected functions *) - let process kf acc = + (* Returns the list of statements of function [kf] that have an impact + annotation. *) + let compute_impact_stmts kf acc = (* Pragma option only accept defined functions. *) let fundec = Kernel_function.get_definition kf in let has_impact_annot stmt = @@ -128,7 +129,7 @@ let compute_annots () = if impact_stmts = [] then acc else (kf, impact_stmts) :: acc in - let impact_stmts = Options.Pragma.fold process [] in + let impact_stmts = Options.Pragma.fold compute_impact_stmts [] in let skip = Compute_impact.skip () in (* compute impact analyses on each kf *) let nodes = List.fold_left diff --git a/src/plugins/metrics/metrics_pivot.ml b/src/plugins/metrics/metrics_pivot.ml index ad4dd73a432..bceb343d9ed 100644 --- a/src/plugins/metrics/metrics_pivot.ml +++ b/src/plugins/metrics/metrics_pivot.ml @@ -391,7 +391,6 @@ class full_visitor = object(self) method! vallocates _ = Cil.DoChildren method! vallocation _ = Cil.DoChildren method! vslice_pragma _ = Cil.DoChildren - method! vimpact_pragma _ = Cil.DoChildren method! vdeps _ = Cil.DoChildren method! vfrom _ = Cil.DoChildren method! vcode_annot _ = -- GitLab