From 1d043d3dc1d162bcc4b66fed6fa63e206c7f9946 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Lo=C3=AFc=20Correnson?= <loic.correnson@cea.fr>
Date: Wed, 17 Apr 2024 18:02:28 +0200
Subject: [PATCH] [kernel] remove loop_pragma

---
 bin/frama-c.debug                             |  1 -
 ivette/src/frama-c/kernel/Properties.tsx      |  1 -
 src/kernel_internals/parsing/logic_parser.mly | 11 ----------
 src/kernel_services/analysis/logic_deps.ml    | 11 +---------
 src/kernel_services/ast_data/cil_types.ml     |  5 -----
 .../ast_printing/cil_printer.ml               |  9 --------
 .../ast_printing/cil_types_debug.ml           |  6 ------
 .../ast_printing/cil_types_debug.mli          |  2 --
 .../ast_printing/logic_print.ml               |  5 -----
 src/kernel_services/ast_queries/ast_diff.ml   |  7 +------
 src/kernel_services/ast_queries/cil.ml        | 16 --------------
 src/kernel_services/ast_queries/cil.mli       |  1 -
 .../ast_queries/logic_typing.ml               |  7 -------
 .../ast_queries/logic_utils.ml                | 21 +++----------------
 .../ast_queries/logic_utils.mli               |  4 ----
 src/kernel_services/parsetree/logic_ptree.ml  |  5 -----
 src/plugins/metrics/metrics_pivot.ml          |  1 -
 src/plugins/server/kernel_properties.ml       |  4 ++--
 src/plugins/wp/RefUsage.ml                    |  1 -
 src/plugins/wp/RegionAccess.ml                |  1 -
 src/plugins/wp/wpReached.ml                   |  7 -------
 21 files changed, 7 insertions(+), 119 deletions(-)

diff --git a/bin/frama-c.debug b/bin/frama-c.debug
index 14eab40782e..4140818cbff 100755
--- a/bin/frama-c.debug
+++ b/bin/frama-c.debug
@@ -124,7 +124,6 @@ install_printer Cil_types_debug.pp_predicate
 install_printer Cil_types_debug.pp_spec
 install_printer Cil_types_debug.pp_acsl_extension
 install_printer Cil_types_debug.pp_acsl_extension_kind
-install_printer Cil_types_debug.pp_loop_pragma
 install_printer Cil_types_debug.pp_slice_pragma
 install_printer Cil_types_debug.pp_impact_pragma
 install_printer Cil_types_debug.pp_pragma
diff --git a/ivette/src/frama-c/kernel/Properties.tsx b/ivette/src/frama-c/kernel/Properties.tsx
index cac61e927ed..7aa7f20eee3 100644
--- a/ivette/src/frama-c/kernel/Properties.tsx
+++ b/ivette/src/frama-c/kernel/Properties.tsx
@@ -210,7 +210,6 @@ function filterKind(
     case 'behavior': return filter('kind.behavior');
     case 'reachable': return filter('kind.reachable');
     case 'axiomatic': return filter('kind.axiomatic');
-    case 'loop_pragma': return filter('kind.pragma');
     case 'assumes': return filter('kind.assumes');
     default: return filter('kind.others');
   }
diff --git a/src/kernel_internals/parsing/logic_parser.mly b/src/kernel_internals/parsing/logic_parser.mly
index 5793c2feb49..bfe8101644b 100644
--- a/src/kernel_internals/parsing/logic_parser.mly
+++ b/src/kernel_internals/parsing/logic_parser.mly
@@ -1402,8 +1402,6 @@ loop_annot_stack:
       check_empty
         (pos,"loop annotations can have at most one variant.") v ;
       (i,fa,a,b,AVariant loop_variant::v,p,e) }
-| loop_pragma loop_annot_opt
-    { let (i,fa,a,b,v,p,e) = $2 in (i,fa,a,b,v,APragma (Loop_pragma $1)::p,e) }
 | loop_grammar_extension loop_annot_opt {
     let (i,fa,a,b,v,p,e) = $2 in
     (i,fa,a,b,v,p, $1::e)
@@ -1458,15 +1456,6 @@ loop_grammar_extension:
 }
 ;
 
-loop_pragma:
-| LOOP PRAGMA any_identifier ne_lexpr_list SEMICOLON
-  { if $3 = "UNROLL_LOOP" || $3 = "UNROLL" then
-      (if $3 <> "UNROLL" then
-	 Format.eprintf "Warning: use of deprecated keyword '%s'.\nShould use 'UNROLL' instead.@." $3;
-       Unroll_specs $4)
-    else raise (Not_well_formed (loc $sloc,"Unknown loop pragma")) }
-;
-
 /*** code annotations ***/
 
 beg_pragma_or_code_annotation:
diff --git a/src/kernel_services/analysis/logic_deps.ml b/src/kernel_services/analysis/logic_deps.ml
index 65883a64ce2..58ebef5f16c 100644
--- a/src/kernel_services/analysis/logic_deps.ml
+++ b/src/kernel_services/analysis/logic_deps.ml
@@ -478,15 +478,6 @@ let get_zone_from_annot a (ki,kf) loop_body_opt results =
   | AVariant (term,_) ->
     (* to preserve the interpretation of the variant *)
     get_zone_from_term (Option.get loop_body_opt) term results
-  | APragma (Loop_pragma (Unroll_specs terms)) ->
-    (* to select the declaration of the variables *)
-    List.fold_left
-      (fun results term -> {
-           results with
-           locals = Varinfo.Set.union (extract_locals_from_term term) results.locals;
-           labels = Logic_label.Set.union (extract_labels_from_term term) results.labels
-         })
-      results terms
   | AAllocation (_,FreeAllocAny) -> results
   | AAllocation (_,FreeAlloc(f,a)) ->
     let get_zone results x =
@@ -571,7 +562,7 @@ let code_annot_filter annot ~threat ~user_assert ~slicing_pragma ~loop_inv ~loop
   | AInvariant(_,false,_) -> others
   | AAllocation _ -> others
   | AAssigns _ -> others
-  | APragma (Loop_pragma _)| APragma (Impact_pragma _) -> 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 8cb7318ad07..af831a23c67 100644
--- a/src/kernel_services/ast_data/cil_types.ml
+++ b/src/kernel_services/ast_data/cil_types.ml
@@ -1735,10 +1735,6 @@ and behavior = {
   (** extensions *)
 }
 
-(** Pragmas for the value analysis plugin of Frama-C. *)
-and loop_pragma =
-  | Unroll_specs of term list
-
 (** Pragmas for the slicing plugin of Frama-C. *)
 and slice_pragma =
   | SPexpr of term
@@ -1752,7 +1748,6 @@ and impact_pragma =
 
 (** The various kinds of pragmas. *)
 and pragma =
-  | Loop_pragma of loop_pragma
   | Slice_pragma of slice_pragma
   | Impact_pragma of impact_pragma
 
diff --git a/src/kernel_services/ast_printing/cil_printer.ml b/src/kernel_services/ast_printing/cil_printer.ml
index 31b287429f8..cf4e8133a87 100644
--- a/src/kernel_services/ast_printing/cil_printer.ml
+++ b/src/kernel_services/ast_printing/cil_printer.ml
@@ -3163,11 +3163,6 @@ class cil_printer () = object (self)
       (pp_list nl_complete self#complete_behaviors) complete
       (pp_list false self#disjoint_behaviors) disjoint
 
-  method private loop_pragma fmt = function
-    | Unroll_specs terms ->
-      fprintf fmt "UNROLL @[%a@]"
-        (Pretty_utils.pp_list ~sep:",@ " self#term) terms
-
   method private slice_pragma fmt = function
     |SPexpr t -> fprintf fmt "expr @[%a@]" self#term t
     | SPctrl -> Format.pp_print_string fmt "ctrl"
@@ -3201,10 +3196,6 @@ class cil_printer () = object (self)
       fprintf fmt "@[%a@ %a;@]"
         self#pp_acsl_keyword "impact pragma"
         self#impact_pragma sp
-    | APragma (Loop_pragma lp) ->
-      fprintf fmt "@[%a@ %a;@]"
-        self#pp_acsl_keyword "loop pragma"
-        self#loop_pragma lp
     | 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 ed13828430d..a452c07e658 100644
--- a/src/kernel_services/ast_printing/cil_types_debug.ml
+++ b/src/kernel_services/ast_printing/cil_types_debug.ml
@@ -929,10 +929,6 @@ and pp_termination_kind fmt = function
   | Continues -> Format.fprintf fmt "Continues"
   | Returns -> Format.fprintf fmt "Returns"
 
-and pp_loop_pragma fmt = function
-  | Unroll_specs(term_list) ->
-    Format.fprintf fmt "Unroll_specs(%a)" (pp_list pp_term) term_list
-
 and pp_slice_pragma fmt = function
   | SPexpr(term) -> Format.fprintf fmt "SPexpr(%a)" pp_term term
   | SPctrl -> Format.fprintf fmt "SPctrl"
@@ -943,8 +939,6 @@ and pp_impact_pragma fmt = function
   | IPstmt -> Format.fprintf fmt "IPstmt"
 
 and pp_pragma fmt = function
-  | Loop_pragma(term) ->
-    Format.fprintf fmt "Loop_pragma(%a)" pp_loop_pragma term
   | Slice_pragma(term) ->
     Format.fprintf fmt "Slice_pragma(%a)" pp_slice_pragma term
   | Impact_pragma(term) ->
diff --git a/src/kernel_services/ast_printing/cil_types_debug.mli b/src/kernel_services/ast_printing/cil_types_debug.mli
index e9d3c6fb74a..3a0fbb3d918 100644
--- a/src/kernel_services/ast_printing/cil_types_debug.mli
+++ b/src/kernel_services/ast_printing/cil_types_debug.mli
@@ -140,8 +140,6 @@ val pp_acsl_extension_kind :
 val pp_behavior : Format.formatter -> Cil_types.behavior -> unit
 val pp_termination_kind :
   Format.formatter -> Cil_types.termination_kind -> unit
-val pp_loop_pragma :
-  Format.formatter -> Cil_types.loop_pragma -> unit
 val pp_slice_pragma :
   Format.formatter -> Cil_types.slice_pragma -> unit
 val pp_impact_pragma :
diff --git a/src/kernel_services/ast_printing/logic_print.ml b/src/kernel_services/ast_printing/logic_print.ml
index f0aeef687ba..17808d4c970 100644
--- a/src/kernel_services/ast_printing/logic_print.ml
+++ b/src/kernel_services/ast_printing/logic_print.ml
@@ -450,10 +450,6 @@ let print_spec fmt spec =
        ~sep:"@\n" ~suf:"@\n" (pp_list ~sep:",@ " pp_print_string))
     spec.spec_disjoint_behaviors
 
-let print_loop_pragma fmt p =
-  match p with
-    Unroll_specs l -> fprintf fmt "UNROLL@ %a" (pp_list ~sep:",@ " print_lexpr) l
-
 let print_slice_pragma fmt p =
   match p with
   | SPexpr e -> fprintf fmt "expr@ %a" print_lexpr e
@@ -467,7 +463,6 @@ let print_impact_pragma fmt p =
 
 let print_pragma fmt p =
   match p with
-    Loop_pragma p -> fprintf fmt "loop@ pragma@ %a;" print_loop_pragma p
   | Slice_pragma p -> fprintf fmt "slice@ pragma@ %a;" print_slice_pragma p
   | Impact_pragma p -> fprintf fmt "impact@ pragma@ %a;" print_impact_pragma p
 
diff --git a/src/kernel_services/ast_queries/ast_diff.ml b/src/kernel_services/ast_queries/ast_diff.ml
index 35206eb8bd5..d5d4be2b0de 100644
--- a/src/kernel_services/ast_queries/ast_diff.ml
+++ b/src/kernel_services/ast_queries/ast_diff.ml
@@ -700,10 +700,6 @@ and is_same_behavior b b' env =
 and is_same_variant (v,m) (v',m') env =
   is_same_term v v' env && is_same_opt is_matching_logic_info m m' env
 
-and is_same_loop_pragma p p' env =
-  match p, p' with
-  | Unroll_specs l, Unroll_specs l' -> is_same_list is_same_term l l' env
-
 and is_same_slice_pragma p p' env =
   match p, p' with
   | SPexpr t, SPexpr t' -> is_same_term t t' env
@@ -719,10 +715,9 @@ and is_same_impact_pragma p p' env =
 
 and is_same_pragma p p' env =
   match p,p' with
-  | Loop_pragma p, Loop_pragma p' -> is_same_loop_pragma p p' env
   | 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
-  | (Loop_pragma _ | Slice_pragma _ | Impact_pragma _), _ -> false
+  | (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 e287cf0048d..8b564568953 100644
--- a/src/kernel_services/ast_queries/cil.ml
+++ b/src/kernel_services/ast_queries/cil.ml
@@ -1016,8 +1016,6 @@ class type cilVisitor = object
   method vallocation:
     allocation -> allocation visitAction
 
-  method vloop_pragma: loop_pragma -> loop_pragma visitAction
-
   method vslice_pragma: slice_pragma -> slice_pragma visitAction
   method vimpact_pragma: impact_pragma -> impact_pragma visitAction
 
@@ -1153,8 +1151,6 @@ class internal_genericCilVisitor current_func behavior queue: cilVisitor =
     method vallocates _s = DoChildren
     method vallocation _s = DoChildren
 
-    method vloop_pragma _ = DoChildren
-
     method vslice_pragma _ = DoChildren
     method vimpact_pragma _ = DoChildren
 
@@ -2041,15 +2037,6 @@ 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 visitCilLoopPragma vis p =
-  doVisitCil vis
-    id vis#vloop_pragma childrenLoopPragma p
-
-and childrenLoopPragma vis p =
-  match p with
-  | Unroll_specs lt -> let lt' = mapNoCopy (visitCilTerm vis) lt in
-    if lt' != lt then Unroll_specs lt' else p
-
 and childrenModelInfo vis m =
   let field_type = visitCilLogicType vis m.mi_field_type in
   let base_type = visitCilType vis m.mi_base_type in
@@ -2168,9 +2155,6 @@ and childrenCodeAnnot vis ca =
   | APragma (Slice_pragma t) ->
     let t' = visitCilSlicePragma vis t in
     if t' != t then change_content (APragma (Slice_pragma t')) else ca
-  | APragma (Loop_pragma p) ->
-    let p' = visitCilLoopPragma vis p in
-    if p' != p then change_content (APragma (Loop_pragma p')) else ca
   | AStmtSpec (behav,s) ->
     let s' = vSpec s in
     if s' != s then change_content (AStmtSpec (behav,s')) else ca
diff --git a/src/kernel_services/ast_queries/cil.mli b/src/kernel_services/ast_queries/cil.mli
index ca938f4a42d..c0e5ba3f954 100644
--- a/src/kernel_services/ast_queries/cil.mli
+++ b/src/kernel_services/ast_queries/cil.mli
@@ -2013,7 +2013,6 @@ class type cilVisitor = object
   method vallocation: allocation -> allocation visitAction
   (**   @since Oxygen-20120901 *)
 
-  method vloop_pragma: loop_pragma -> loop_pragma visitAction
   method vslice_pragma: slice_pragma -> slice_pragma visitAction
   method vimpact_pragma: impact_pragma -> impact_pragma visitAction
 
diff --git a/src/kernel_services/ast_queries/logic_typing.ml b/src/kernel_services/ast_queries/logic_typing.ml
index 9c5eddcfe4c..1ad0b7ba8fa 100644
--- a/src/kernel_services/ast_queries/logic_typing.ml
+++ b/src/kernel_services/ast_queries/logic_typing.ml
@@ -3632,10 +3632,6 @@ struct
 
   let plain_logic_type loc env t = logic_type (base_ctxt env) loc env t
 
-  let loop_pragma env p =
-    match p with
-    | Unroll_specs l -> Cil_types.Unroll_specs (List.map (term env) l)
-
   let model_annot loc ti =
     let env = Lenv.empty() in
     let model_for_type =
@@ -3870,9 +3866,6 @@ struct
       | APragma (Slice_pragma sp) ->
         Cil_types.APragma
           (Cil_types.Slice_pragma (slice_pragma (code_annot_env()) sp))
-      | APragma (Loop_pragma lp) ->
-        Cil_types.APragma
-          (Cil_types.Loop_pragma (loop_pragma (code_annot_env()) lp))
       | AStmtSpec (behav,s) ->
         (* function behaviors and statement behaviors are not at the
            same level. Do not mix them in a complete or disjoint clause
diff --git a/src/kernel_services/ast_queries/logic_utils.ml b/src/kernel_services/ast_queries/logic_utils.ml
index 6846b6e7114..06e5268adf3 100644
--- a/src/kernel_services/ast_queries/logic_utils.ml
+++ b/src/kernel_services/ast_queries/logic_utils.ml
@@ -731,7 +731,7 @@ let is_annot_next_stmt c =
   | AAssigns _ | AAllocation _
   | APragma (Slice_pragma (SPctrl | SPexpr _))
   | APragma (Impact_pragma (IPexpr _))
-  | APragma (Loop_pragma _) -> false
+    -> false
 
 let rec add_attribute_glob_annot a g =
   match g with
@@ -1176,10 +1176,6 @@ let is_same_logic_type_info t1 t2 =
   is_same_attributes t1.lt_attr t2.lt_attr &&
   is_same_opt is_same_logic_type_def t1.lt_def t2.lt_def
 
-let is_same_loop_pragma p1 p2 =
-  match p1,p2 with
-    Unroll_specs l1, Unroll_specs l2 -> is_same_list is_same_term l1 l2
-
 let is_same_slice_pragma p1 p2 =
   match p1,p2 with
     SPexpr t1, SPexpr t2 -> is_same_term t1 t2
@@ -1194,10 +1190,9 @@ let is_same_impact_pragma p1 p2 =
 
 let is_same_pragma p1 p2 =
   match p1,p2 with
-  | Loop_pragma p1, Loop_pragma p2 -> is_same_loop_pragma p1 p2
   | Slice_pragma p1, Slice_pragma p2 -> is_same_slice_pragma p1 p2
   | Impact_pragma p1, Impact_pragma p2 -> is_same_impact_pragma p1 p2
-  | (Loop_pragma _ | Slice_pragma _ | Impact_pragma _), _ -> false
+  | (Slice_pragma _ | Impact_pragma _), _ -> false
 
 let rec is_same_extension x1 x2 =
   Datatype.String.equal x1.ext_name x2.ext_name &&
@@ -2275,9 +2270,6 @@ let is_assigns ca =
 let is_pragma ca =
   match ca.annot_content with APragma _ -> true | _ -> false
 
-let is_loop_pragma ca =
-  match ca.annot_content with APragma (Loop_pragma _) -> true | _ -> false
-
 let is_slice_pragma ca =
   match ca.annot_content with APragma (Slice_pragma _) -> true | _ -> false
 
@@ -2289,7 +2281,7 @@ let is_loop_extension ca =
 
 let is_loop_annot s =
   is_loop_invariant s || is_assigns s || is_allocation s ||
-  is_variant s || is_loop_pragma s || is_loop_extension s
+  is_variant s || is_loop_extension s
 
 let is_trivial_annotation a =
   match a.annot_content with
@@ -2299,18 +2291,11 @@ let is_trivial_annotation a =
     -> false
 
 let is_property_pragma = function
-  | Loop_pragma (Unroll_specs _)
   | Slice_pragma (SPexpr _ | SPctrl | SPstmt)
   | Impact_pragma (IPexpr _ | IPstmt) -> false
 (* If at some time a pragma becomes something which should be proven,
    update the pragma-related code in gui/property_navigator.ml *)
 
-
-let extract_loop_pragma l =
-  List.fold_right
-    (fun ca l -> match ca.annot_content with
-         APragma (Loop_pragma lp) -> lp::l | _ -> l) l []
-
 let extract_contract l =
   List.fold_right
     (fun ca l -> match ca.annot_content with
diff --git a/src/kernel_services/ast_queries/logic_utils.mli b/src/kernel_services/ast_queries/logic_utils.mli
index f17f5537f1b..e59cab55aae 100644
--- a/src/kernel_services/ast_queries/logic_utils.mli
+++ b/src/kernel_services/ast_queries/logic_utils.mli
@@ -373,7 +373,6 @@ val is_same_logic_type_def :
   logic_type_def -> logic_type_def -> bool
 val is_same_logic_type_info :
   logic_type_info -> logic_type_info -> bool
-val is_same_loop_pragma : loop_pragma -> loop_pragma -> 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
@@ -460,7 +459,6 @@ val is_variant : code_annotation -> bool
 val is_allocation: code_annotation -> bool
 val is_assigns : code_annotation -> bool
 val is_pragma : code_annotation -> bool
-val is_loop_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
@@ -470,8 +468,6 @@ val is_trivial_annotation : code_annotation -> bool
 val is_property_pragma : pragma -> bool
 (** Should this pragma be proved by plugins *)
 
-val extract_loop_pragma :
-  code_annotation list -> loop_pragma list
 val extract_contract :
   code_annotation list -> (string list * funspec) list
 
diff --git a/src/kernel_services/parsetree/logic_ptree.ml b/src/kernel_services/parsetree/logic_ptree.ml
index d123c416326..ce029977c03 100644
--- a/src/kernel_services/parsetree/logic_ptree.ml
+++ b/src/kernel_services/parsetree/logic_ptree.ml
@@ -321,10 +321,6 @@ type spec = {
 
 (** Pragmas for the value analysis plugin of Frama-C. *)
 
-type loop_pragma =
-  | Unroll_specs of lexpr list
-
-(** Pragmas for the slicing plugin of Frama-C. *)
 and slice_pragma =
   | SPexpr of lexpr
   | SPctrl
@@ -337,7 +333,6 @@ and impact_pragma =
 
 (** The various kinds of pragmas. *)
 and pragma =
-  | Loop_pragma of loop_pragma
   | Slice_pragma of slice_pragma
   | Impact_pragma of impact_pragma
 
diff --git a/src/plugins/metrics/metrics_pivot.ml b/src/plugins/metrics/metrics_pivot.ml
index 62f57e9b0f6..4a291642b00 100644
--- a/src/plugins/metrics/metrics_pivot.ml
+++ b/src/plugins/metrics/metrics_pivot.ml
@@ -390,7 +390,6 @@ class full_visitor = object(self)
   method! vfrees _ = Cil.DoChildren
   method! vallocates _ = Cil.DoChildren
   method! vallocation _ = Cil.DoChildren
-  method! vloop_pragma _ = Cil.DoChildren
   method! vslice_pragma _ = Cil.DoChildren
   method! vimpact_pragma _ = Cil.DoChildren
   method! vdeps _ = Cil.DoChildren
diff --git a/src/plugins/server/kernel_properties.ml b/src/plugins/server/kernel_properties.ml
index b7e821e4906..191ed903731 100644
--- a/src/plugins/server/kernel_properties.ml
+++ b/src/plugins/server/kernel_properties.ml
@@ -70,7 +70,7 @@ struct
   let t_loop_assigns = t_loop "assigns"
   let t_loop_variant = t_loop "variant"
   let t_loop_allocates = t_loop "allocates"
-  let t_loop_pragma = t_loop "pragma"
+  let t_pragma = t_loop "pragma"
 
   let t_reachable = t_kind "reachable" "Reachable statement"
   let t_code_contract = t_kind "code_contract" "Statement contract"
@@ -119,7 +119,7 @@ struct
         | AVariant _ -> t_loop_variant
         | AAssigns _ -> t_loop_assigns
         | AAllocation _ -> t_loop_allocates
-        | APragma _ -> t_loop_pragma
+        | APragma _ -> t_pragma
         | AExtended(_,_,{ext_name=_}) -> t_ext
       end
     | IPAllocation _ -> t_allocates
diff --git a/src/plugins/wp/RefUsage.ml b/src/plugins/wp/RefUsage.ml
index 1771bbd362d..4f33131c032 100644
--- a/src/plugins/wp/RefUsage.ml
+++ b/src/plugins/wp/RefUsage.ml
@@ -649,7 +649,6 @@ let cfun_code env kf = (* Visits term/pred of code annotations and C exp *)
     method !vpredicate p = do_pred p ; Cil.SkipChildren
     method !vterm t = do_term t ; Cil.SkipChildren
     (* speed up: skip non interesting subtrees *)
-    method! vloop_pragma _ =  Cil.SkipChildren (* no need *)
     method! vvdec _ = Cil.SkipChildren (* done via stmt *)
     method! vexpr _ = Cil.SkipChildren (* done via stmt *)
     method! vlval _ = Cil.SkipChildren (* done via stmt *)
diff --git a/src/plugins/wp/RegionAccess.ml b/src/plugins/wp/RegionAccess.ml
index 4d1da962951..e79b487cdd3 100644
--- a/src/plugins/wp/RegionAccess.ml
+++ b/src/plugins/wp/RegionAccess.ml
@@ -392,7 +392,6 @@ class visitor map =
     (* vpredicate and vterm are called from vcode_annot *)
 
     (* speed up: skip non interesting subtrees *)
-    method! vloop_pragma _ =  Cil.SkipChildren (* no need *)
     method! vvdec _ = Cil.SkipChildren (* done via stmt *)
     method! vexpr _ = Cil.SkipChildren (* done via stmt *)
     method! vlval _ = Cil.SkipChildren (* done via stmt *)
diff --git a/src/plugins/wp/wpReached.ml b/src/plugins/wp/wpReached.ml
index 8c968ef9650..71c4ebf29a7 100644
--- a/src/plugins/wp/wpReached.ml
+++ b/src/plugins/wp/wpReached.ml
@@ -59,11 +59,6 @@ let node () =
 (* --- Unrolled Loop                                                      --- *)
 (* -------------------------------------------------------------------------- *)
 
-let is_unrolled_completely spec =
-  match spec.term_node with
-  | TConst (LStr "completely") -> true
-  | _ -> false
-
 let rec is_predicate cond p =
   match p.pred_content with
   | Pfalse -> not cond
@@ -88,8 +83,6 @@ let rec is_predicate cond p =
 
 let is_dead_annot ca =
   match ca.annot_content with
-  | APragma (Loop_pragma (Unroll_specs [ spec ; _ ])) ->
-    is_unrolled_completely spec
   | AAssert([],p)
   | AInvariant([],_,p) ->
     Logic_utils.use_predicate p.tp_kind && is_predicate false p.tp_statement
-- 
GitLab