diff --git a/Changelog b/Changelog
index c1519d1bef4d7a87323733f950c114b4edb92dec..a784c580236a5866708ca967e1221460e6fce72e 100644
--- a/Changelog
+++ b/Changelog
@@ -18,6 +18,11 @@
 Open Source Release <next-release>
 ###############################################################################
 
+-   Eva       [2025-01-23] Rename warning key `invalid-assigns` to
+              `assigns:invalid-location`
+-   Eva       [2025-01-23] All warnings about missing assigns or \from clauses
+              are now emitted as errors by default, with the new warning key
+              `assigns:missing`.
 -   Kernel    [2025-01-17] New option -memory-footprint to configure the memory
               usage of analyses.
 o!  Kernel    [2024-12-20] Remove Cabs.SEQUENCE statement
diff --git a/src/libraries/utils/pretty_utils.ml b/src/libraries/utils/pretty_utils.ml
index bac42ea030c7f3038e164f9c0acd9d38512bbb30..df97d37c80c5d5380d58f9219fe448d4b127acc9 100644
--- a/src/libraries/utils/pretty_utils.ml
+++ b/src/libraries/utils/pretty_utils.ml
@@ -37,15 +37,6 @@ let to_string ?margin pp x =
   Format.pp_print_flush f () ;
   Buffer.contents b
 
-let rec pp_print_string_fill out s =
-  if String.contains s ' ' then begin
-    let i = String.index s ' ' in
-    let l = String.length s in
-    let s1 = String.sub s 0 i in
-    let s2 = String.sub s (i+1) (l - i - 1) in
-    Format.fprintf out "%s@ %a" s1 pp_print_string_fill s2
-  end else Format.pp_print_string out s
-
 type sformat = (unit,Format.formatter,unit) format
 type 'a formatter = Format.formatter -> 'a -> unit
 type ('a,'b) formatter2 = Format.formatter -> 'a -> 'b -> unit
diff --git a/src/libraries/utils/pretty_utils.mli b/src/libraries/utils/pretty_utils.mli
index 9082720f017197f68bd737b3e7d4c9786299c2ff..c169cbe4fd9b75ce7866e219d4f9885c59df0ecf 100644
--- a/src/libraries/utils/pretty_utils.mli
+++ b/src/libraries/utils/pretty_utils.mli
@@ -57,9 +57,6 @@ val to_string: ?margin:int -> (Format.formatter -> 'a -> unit) -> 'a -> string
 
 (** {2 separators} *)
 
-val pp_print_string_fill : Format.formatter -> string -> unit
-(** transforms every space in a string in breakable spaces.*)
-
 val escape_underscores : string -> string
 
 (* ********************************************************************** *)
diff --git a/src/plugins/aorai/tests/ya/floats.i b/src/plugins/aorai/tests/ya/floats.i
index 84879fa708d3368a90685b68d1fb5bbcba28dfd1..d8d8d2b898b0cf25557faa7c614856281a0f0059 100644
--- a/src/plugins/aorai/tests/ya/floats.i
+++ b/src/plugins/aorai/tests/ya/floats.i
@@ -1,5 +1,5 @@
 /* run.config*
-  STDOPT: -aorai-automata %{dep:@PTEST_DIR@/@PTEST_NAME@.ya} -then-last -eva
+  STDOPT: -aorai-automata %{dep:@PTEST_DIR@/@PTEST_NAME@.ya} -then-last -eva -eva-warn-key assigns:missing=active
 */
 
 //@ assigns \result \from x, n;
diff --git a/src/plugins/aorai/tests/ya/oracle/floats.res.oracle b/src/plugins/aorai/tests/ya/oracle/floats.res.oracle
index 11062e0fd83fdbe5c227b400a6eaa1209e8af14f..960635f47e9055f7ffce2a06d2fa45b9324868fe 100644
--- a/src/plugins/aorai/tests/ya/oracle/floats.res.oracle
+++ b/src/plugins/aorai/tests/ya/oracle/floats.res.oracle
@@ -14,9 +14,10 @@
   Analysis of function square_root_aux is thus incomplete and its soundness
   relies on the written specification.
 [eva] using specification for function square_root_aux
-[eva] floats.i:6: Warning: 
-  no \from part
-  for clause 'assigns aorai_CurOpStatus, aorai_CurOperation, aorai_CurStates;'
+[eva:assigns:missing] floats.i:6: Warning: 
+  no \from part for clause
+  'assigns aorai_CurOpStatus, aorai_CurOperation, aorai_CurStates;'.
+  Assuming \from \nothing so that the analysis can continue, but be aware this is probably incorrect.
 [eva:alarm] <unknown location> Warning: 
   function square_root_aux, behavior Buchi_property_behavior: postcondition got status unknown.
 [eva:alarm] floats.i:11: Warning: 
diff --git a/src/plugins/aorai/tests/ya/oracle_prove/floats.res.oracle b/src/plugins/aorai/tests/ya/oracle_prove/floats.res.oracle
index 8688011acc97bb434e94372d224c53e917b51b99..eda04cca2f426021910934e62da87f3285e2738f 100644
--- a/src/plugins/aorai/tests/ya/oracle_prove/floats.res.oracle
+++ b/src/plugins/aorai/tests/ya/oracle_prove/floats.res.oracle
@@ -14,9 +14,10 @@
   Analysis of function square_root_aux is thus incomplete and its soundness
   relies on the written specification.
 [eva] using specification for function square_root_aux
-[eva] floats.i:6: Warning: 
-  no \from part
-  for clause 'assigns aorai_CurOpStatus, aorai_CurOperation, aorai_CurStates;'
+[eva:assigns:missing] floats.i:6: Warning: 
+  no \from part for clause
+  'assigns aorai_CurOpStatus, aorai_CurOperation, aorai_CurStates;'.
+  Assuming \from \nothing so that the analysis can continue, but be aware this is probably incorrect.
 [eva:alarm] <unknown location> Warning: 
   function square_root_aux, behavior Buchi_property_behavior: postcondition got status unknown.
 [eva:alarm] floats.i:11: Warning: 
diff --git a/src/plugins/e-acsl/tests/memory/oracle/memsize.res.oracle b/src/plugins/e-acsl/tests/memory/oracle/memsize.res.oracle
index 3e4f2b0295e1fc586820cf1a277c1de17c7449a5..f7c2880850e61b252336c1f86dfd0d8a4de5139d 100644
--- a/src/plugins/e-acsl/tests/memory/oracle/memsize.res.oracle
+++ b/src/plugins/e-acsl/tests/memory/oracle/memsize.res.oracle
@@ -14,7 +14,7 @@
 [eva] memsize.c:25: Warning: ignoring unsupported allocates clause
 [eva:alarm] memsize.c:26: Warning: 
   function __e_acsl_assert, behavior blocking: precondition got status unknown.
-[eva] FRAMAC_SHARE/libc/stdlib.h:485: Warning: 
+[eva:assigns:missing-result] FRAMAC_SHARE/libc/stdlib.h:485: Warning: 
   no 'assigns \result \from ...' clause specified for function realloc
 [eva] memsize.c:29: Warning: ignoring unsupported allocates clause
 [eva:alarm] memsize.c:29: Warning: 
@@ -42,7 +42,7 @@
   function __e_acsl_assert, behavior blocking: precondition got status unknown.
 [eva:alarm] memsize.c:52: Warning: 
   function __e_acsl_assert, behavior blocking: precondition got status unknown.
-[eva] FRAMAC_SHARE/libc/stdlib.h:418: Warning: 
+[eva:assigns:missing-result] FRAMAC_SHARE/libc/stdlib.h:418: Warning: 
   no 'assigns \result \from ...' clause specified for function calloc
 [eva] memsize.c:55: Warning: ignoring unsupported allocates clause
 [eva:alarm] memsize.c:56: Warning: 
diff --git a/src/plugins/eva/engine/compute_functions.ml b/src/plugins/eva/engine/compute_functions.ml
index 30b6bc6e5f96a502df6bebb3f39496128673caf6..49efc48b0bad9cd5941596d6b077f6b3e8e9f73d 100644
--- a/src/plugins/eva/engine/compute_functions.ml
+++ b/src/plugins/eva/engine/compute_functions.ml
@@ -59,12 +59,14 @@ let options_ok () =
   check Parameters.EqualityCallFunction.get;
   let check_assigns kf =
     if need_assigns kf then
-      Self.error "@[no assigns@ specified@ for function '%a',@ for \
-                  which@ a builtin@ or the specification@ will be used.@ \
-                  Potential unsoundness.@]" Kernel_function.pretty kf
+      Self.warning ~wkey:Self.wkey_missing_assigns
+        "@[No assigns specified for function '%a', for which a builtin will be \
+         used. Potential unsoundness.@]"
+        Kernel_function.pretty kf
   in
-  Parameters.BuiltinsOverrides.iter (fun (kf, _) -> check_assigns kf);
-  Parameters.UsePrototype.iter (fun kf -> check_assigns kf)
+  Parameters.BuiltinsOverrides.iter (fun (kf, _) -> check_assigns kf)
+
+(* Parameters.UsePrototype.iter (fun kf -> check_assigns kf) *)
 
 let plugins_ok () =
   if not (Plugin.is_present "inout") then
@@ -77,8 +79,9 @@ let plugins_ok () =
 let generate_specs () =
   let aux kf =
     if need_assigns kf then begin
-      Self.warning "Generating potentially incorrect assigns \
-                    for function '%a' for which option %s is set"
+      Self.warning ~wkey:Self.wkey_missing_assigns
+        "@[No assigns specified for function '%a' for which option %s is set. \
+         Generating potentially incorrect assigns.@]"
         Kernel_function.pretty kf Parameters.UsePrototype.option_name;
       Populate_spec.populate_funspec ~do_body:true kf [`Assigns];
     end
diff --git a/src/plugins/eva/engine/recursion.ml b/src/plugins/eva/engine/recursion.ml
index 4852aa7590e40d00a7c3e812a6fe31fb0e423da7..c984b0bc8b6cbdd38d76050da43da38e6b36ab6b 100644
--- a/src/plugins/eva/engine/recursion.ml
+++ b/src/plugins/eva/engine/recursion.ml
@@ -48,11 +48,11 @@ let check_spec kinstr kf =
   let funspec = Annotations.funspec kf in
   if List.for_all (fun b -> b.b_assigns = WritesAny) funspec.spec_behavior
   then
-    Self.error ~current:true
-      "@[Recursive call to %a@ without assigns clause.@ \
+    Self.warning ~current:true ~wkey:Self.wkey_missing_assigns
+      "@[Recursive call to %a without assigns clause.@ \
        Generating probably incomplete assigns to interpret the call.@ \
-       Try to increase@ the %s parameter@ \
-       or write a correct specification@ for function %a.@\n%t@]"
+       Try to increase the %s parameter \
+       or write a correct specification for function %a.@\n%t@]"
       (* note: the "\n" before the pretty print of the stack is required by:
          FRAMAC_LIB/analysis-scripts/make_wrapper.py
       *)
diff --git a/src/plugins/eva/engine/transfer_specification.ml b/src/plugins/eva/engine/transfer_specification.ml
index 27c8c62b98e4c22dc3cafcfffba856dd7a573147..4697b7f2671b060c9aa199b2d6af8b657aa6d84b 100644
--- a/src/plugins/eva/engine/transfer_specification.ml
+++ b/src/plugins/eva/engine/transfer_specification.ml
@@ -40,19 +40,31 @@ let find_default_behavior spec =
   List.find (fun b' -> b'.b_name = Cil.default_behavior_name) spec.spec_behavior
 
 let warn_empty_assigns () =
-  Self.warning ~current:true ~once:true
-    "Cannot handle empty assigns clause. Assuming assigns \\nothing: \
-     be aware this is probably incorrect."
+  Self.warning ~current:true ~once:true ~wkey:Self.wkey_missing_assigns
+    "Cannot handle empty assigns clause. Assuming assigns \\nothing so that \
+     the analysis can continue, but be aware this is probably incorrect."
 
 (* Warn for assigns clauses without \from. *)
 let warn_empty_from list =
-  let no_from = List.filter (fun (_, from) -> from = FromAny) list in
+  let is_empty_set it =
+    match it with
+    | { it_content = { term_node = Tempty_set }} -> true
+    | _ -> false
+  in
+  let no_from =
+    List.filter
+      (fun (it, from) ->
+         (* Ignore assigns \empty with no \from. *)
+         not (is_empty_set it) && from = FromAny)
+      list
+  in
   match no_from with
   | [] -> ()
   | (out, _) :: _ ->
     let source = fst out.it_content.term_loc in
-    Self.warning ~source ~once:true
-      "@[no \\from part@ for clause '%a'@]"
+    Self.warning ~source ~once:true ~wkey:Self.wkey_missing_assigns
+      "@[no \\from part for clause@ '%a'.@ Assuming \\from \\nothing so that \
+       the analysis can continue, but be aware this is probably incorrect.@]"
       Printer.pp_assigns (Writes no_from)
 
 let get_assigns = function
@@ -124,8 +136,8 @@ let warn_on_missing_result_assigns kinstr kf spec =
   if return_used && not (List.for_all assigns_result spec.spec_behavior)
   then
     let source = fst (Kernel_function.get_location kf) in
-    Self.warning ~once:true ~source
-      "@[no 'assigns \\result@ \\from ...'@ clause@ specified for@ function %a@]"
+    Self.warning ~wkey:Self.wkey_missing_assigns_result  ~once:true ~source
+      "@[no 'assigns \\result \\from ...' clause specified for function %a@]"
       Kernel_function.pretty kf
 
 let reduce_to_valid_location kind term loc =
diff --git a/src/plugins/eva/self.ml b/src/plugins/eva/self.ml
index e270b09a08f63e30934c8ffd762ad6c6f9226f57..5fb3cb9223b4f218576e43a3e0d1796fd8e1bed9 100644
--- a/src/plugins/eva/self.ml
+++ b/src/plugins/eva/self.ml
@@ -138,8 +138,11 @@ let () = set_warn_status wkey_missing_loop_unroll Log.Winactive
 let wkey_missing_loop_unroll_for = register_warn_category "loop-unroll:missing:for"
 let () = set_warn_status wkey_missing_loop_unroll_for Log.Winactive
 let wkey_signed_overflow = register_warn_category "signed-overflow"
-let wkey_invalid_assigns = register_warn_category "invalid-assigns"
+let wkey_invalid_assigns = register_warn_category "assigns:invalid-location"
 let () = set_warn_status wkey_invalid_assigns Log.Wfeedback
+let wkey_missing_assigns = register_warn_category "assigns:missing"
+let () = set_warn_status wkey_missing_assigns Log.Werror
+let wkey_missing_assigns_result = register_warn_category "assigns:missing-result"
 let wkey_experimental = register_warn_category "experimental"
 let wkey_unknown_size = register_warn_category "unknown-size"
 let wkey_ensures_false = register_warn_category "ensures-false"
diff --git a/src/plugins/eva/self.mli b/src/plugins/eva/self.mli
index 14c2020a03347a60098d0ae49bd02195e8031ce9..0e05e69bb710893b044ddad5061212023c3a36e2 100644
--- a/src/plugins/eva/self.mli
+++ b/src/plugins/eva/self.mli
@@ -69,6 +69,8 @@ val wkey_missing_loop_unroll : warn_category
 val wkey_missing_loop_unroll_for : warn_category
 val wkey_signed_overflow : warn_category
 val wkey_invalid_assigns : warn_category
+val wkey_missing_assigns : warn_category
+val wkey_missing_assigns_result : warn_category
 val wkey_experimental : warn_category
 val wkey_unknown_size : warn_category
 val wkey_ensures_false : warn_category
diff --git a/src/plugins/variadic/tests/known/oracle/exec.res.oracle b/src/plugins/variadic/tests/known/oracle/exec.res.oracle
index 1da3a3b77a3c13cd853560b8888d5e9d7842e666..22c098c54d1ad5f2e224a66dfc6f584f03da72f8 100644
--- a/src/plugins/variadic/tests/known/oracle/exec.res.oracle
+++ b/src/plugins/variadic/tests/known/oracle/exec.res.oracle
@@ -43,7 +43,7 @@
   Neither code nor specification for function execlp_fallback_1,
    generating default assigns. See -generated-spec-* options for more info
 [eva] using specification for function execlp
-[eva:invalid-assigns] exec.c:15: 
+[eva:assigns:invalid-location] exec.c:15: 
   Completely invalid destination for assigns clause *(param1 + (0 ..)).
   Ignoring.
 [eva] ====== VALUES COMPUTED ======
diff --git a/src/plugins/variadic/tests/known/oracle/ioctl.res.oracle b/src/plugins/variadic/tests/known/oracle/ioctl.res.oracle
index b81c4a205054408e1e93413c92a73dbf0a56745e..7a10dd4b7f203e009b806548b4d124e6c17d429d 100644
--- a/src/plugins/variadic/tests/known/oracle/ioctl.res.oracle
+++ b/src/plugins/variadic/tests/known/oracle/ioctl.res.oracle
@@ -11,7 +11,7 @@
 [eva] Analyzing a complete application starting at main
 [eva] using specification for function __va_ioctl_void
 [eva] using specification for function __va_ioctl_ptr
-[eva:invalid-assigns] ioctl.c:17: 
+[eva:assigns:invalid-location] ioctl.c:17: 
   Completely invalid destination for assigns clause *((char *)argp + (0 ..)).
   Ignoring.
 [eva] using specification for function __va_ioctl_int
diff --git a/src/plugins/variadic/tests/known/oracle/printf.res.oracle b/src/plugins/variadic/tests/known/oracle/printf.res.oracle
index a4bc497d2519e7a7a1689ca4ddb35ae17826dbcc..0340f6ca2e98c45d9136b5748c41959e630fda5d 100644
--- a/src/plugins/variadic/tests/known/oracle/printf.res.oracle
+++ b/src/plugins/variadic/tests/known/oracle/printf.res.oracle
@@ -105,7 +105,7 @@
 [kernel:annot:missing-spec] printf.c:71: Warning: 
   Neither code nor specification for function printf_fallback_1,
    generating default assigns. See -generated-spec-* options for more info
-[eva:invalid-assigns] printf.c:71: 
+[eva:assigns:invalid-location] printf.c:71: 
   Completely invalid destination for assigns clause *(param1 + (0 ..)).
   Ignoring.
 [eva] ====== VALUES COMPUTED ======
diff --git a/tests/builtins/oracle/from_result.res.oracle b/tests/builtins/oracle/from_result.res.oracle
index 947ea0bed392daa6a55090a0d52fff7c3b265995..e1d0931d67dd12df046de54d7fe7de3d051fd1ee 100644
--- a/tests/builtins/oracle/from_result.res.oracle
+++ b/tests/builtins/oracle/from_result.res.oracle
@@ -31,7 +31,7 @@
 [eva] computing for function foo <- main.
   Called from from_result.c:37.
 [eva] using specification for function foo
-[eva] from_result.c:29: Warning: 
+[eva:assigns:missing-result] from_result.c:29: Warning: 
   no 'assigns \result \from ...' clause specified for function foo
 [eva] Done for function foo
 [eva] Recording results for main
diff --git a/tests/builtins/oracle/imprecise.res.oracle b/tests/builtins/oracle/imprecise.res.oracle
index d1109bb30e959c3ab228bc4c6ab6338e51d856e0..a3f654bb1e21208a52565ba90f0c5c354b160e9d 100644
--- a/tests/builtins/oracle/imprecise.res.oracle
+++ b/tests/builtins/oracle/imprecise.res.oracle
@@ -39,7 +39,7 @@
 [eva] computing for function f <- invalid_assigns_imprecise <- main.
   Called from imprecise.c:11.
 [eva] using specification for function f
-[eva:invalid-assigns] imprecise.c:11: 
+[eva:assigns:invalid-location] imprecise.c:11: 
   Completely invalid destination for assigns clause *p. Ignoring.
 [eva] Done for function f
 [eva] Recording results for invalid_assigns_imprecise
diff --git a/tests/fc_script/make-wrapper.t/run.t b/tests/fc_script/make-wrapper.t/run.t
index e70aaa31a57f87209702a00fbbae0814ef2f7258..936b5c2b4d211b3752646aae45cb0632350e66be 100644
--- a/tests/fc_script/make-wrapper.t/run.t
+++ b/tests/fc_script/make-wrapper.t/run.t
@@ -17,12 +17,10 @@ verbose output for Make.
   [eva:recursion] make-wrapper.c:17: 
     detected recursive call
     of function large_name_to_force_line_break_in_stack_msg.
-  [eva] make-wrapper.c:17: User Error: 
-    Recursive call to large_name_to_force_line_break_in_stack_msg
-    without assigns clause.
-    Generating probably incomplete assigns to interpret the call. Try to increase
-    the -eva-unroll-recursive-calls parameter or write a correct specification
-    for function large_name_to_force_line_break_in_stack_msg.
+  [eva:assigns:missing] make-wrapper.c:17: Warning: 
+    Recursive call to large_name_to_force_line_break_in_stack_msg without assigns clause.
+    Generating probably incomplete assigns to interpret the call.
+    Try to increase the -eva-unroll-recursive-calls parameter or write a correct specification for function large_name_to_force_line_break_in_stack_msg.
      stack: large_name_to_force_line_break_in_stack_msg :: make-wrapper.c:17 <-
             large_name_to_force_line_break_in_stack_msg :: make-wrapper.c:21 <-
             rec :: make-wrapper.c:26 <-
diff --git a/tests/float/oracle/logic.0.res.oracle b/tests/float/oracle/logic.0.res.oracle
index 160f80b0c1ec85a4e31961bddad4dfcec0a7fb9d..8487b6d802ac2b199da7844d05639412d2474c02 100644
--- a/tests/float/oracle/logic.0.res.oracle
+++ b/tests/float/oracle/logic.0.res.oracle
@@ -334,7 +334,7 @@
 [eva] computing for function my_ratio <- test_is_finite <- main.
   Called from logic.i:181.
 [eva] using specification for function my_ratio
-[eva] logic.i:153: Warning: 
+[eva:assigns:missing-result] logic.i:153: Warning: 
   no 'assigns \result \from ...' clause specified for function my_ratio
 [eva] Done for function my_ratio
 [eva] computing for function my_ratio_body <- test_is_finite <- main.
diff --git a/tests/float/oracle/logic.1.res.oracle b/tests/float/oracle/logic.1.res.oracle
index 10df71b62bdfd6efa259cf507b19d69dc1868057..7ae4cb5160b7afb9acc6e18dc05f3aca34a18ce6 100644
--- a/tests/float/oracle/logic.1.res.oracle
+++ b/tests/float/oracle/logic.1.res.oracle
@@ -336,7 +336,7 @@
 [eva] computing for function my_ratio <- test_is_finite <- main.
   Called from logic.i:181.
 [eva] using specification for function my_ratio
-[eva] logic.i:153: Warning: 
+[eva:assigns:missing-result] logic.i:153: Warning: 
   no 'assigns \result \from ...' clause specified for function my_ratio
 [eva] Done for function my_ratio
 [eva] computing for function my_ratio_body <- test_is_finite <- main.
diff --git a/tests/impact/call.i b/tests/impact/call.i
index 65a046489c1fedd09ad8f9488da1f8a52c2622ae..470cb61c0b654fa0147362c70e98a2cb1ce07472 100644
--- a/tests/impact/call.i
+++ b/tests/impact/call.i
@@ -38,7 +38,7 @@ void main2(int x) {
 
 /* ************************************************************************* */
 
-/*@ assigns G; */
+/*@ assigns G \from \nothing; */
 void p3 (int);
 
 void test3 (void) {
diff --git a/tests/impact/oracle/call.2.res.oracle b/tests/impact/oracle/call.2.res.oracle
index 2d7016cb262fe25ca6633576337ee357d677d885..083752beda8c27c51bff76462387af17eec97c59 100644
--- a/tests/impact/oracle/call.2.res.oracle
+++ b/tests/impact/oracle/call.2.res.oracle
@@ -13,7 +13,6 @@
 [eva] computing for function p3 <- test3 <- call_test3 <- main3.
   Called from call.i:45.
 [eva] using specification for function p3
-[eva] call.i:41: Warning: no \from part for clause 'assigns G;'
 [eva] Done for function p3
 [kernel:annot:missing-spec] call.i:45: Warning: 
   Neither code nor specification for function p2,
@@ -44,7 +43,10 @@
 [pdg] done for function test3
 [pdg] computing for function p3
 [pdg] done for function p3
+[pdg] computing for function p2
+[pdg] done for function p2
 [impact] impacted statements of stmt(s) 30 are:
-    call.i:45 (sid 22): p3(1);call.i:49 (sid 26): test3();
+    call.i:45 (sid 21): if(X) <..>call.i:45 (sid 22): p3(1);
+    call.i:45 (sid 23): p2(0);call.i:49 (sid 26): test3();
     call.i:55 (sid 31): call_test3();
 [impact] analysis done
diff --git a/tests/libc/oracle/libgen_h.res.oracle b/tests/libc/oracle/libgen_h.res.oracle
index 9e5405c1b5985d48f0095eaa36feacc6be89081d..d7df73fb9973ed6f8f9b3e81949ae7a8664a105c 100644
--- a/tests/libc/oracle/libgen_h.res.oracle
+++ b/tests/libc/oracle/libgen_h.res.oracle
@@ -15,7 +15,7 @@
   Called from libgen_h.c:11.
 [eva] libgen_h.c:11: 
   function basename: precondition 'null_or_valid_string_path' got status valid.
-[eva:invalid-assigns] libgen_h.c:11: 
+[eva:assigns:invalid-location] libgen_h.c:11: 
   Completely invalid destination for assigns clause *(path + (0 ..)). Ignoring.
 [eva] Done for function basename
 [eva:alarm] libgen_h.c:12: Warning: assertion got status unknown.
@@ -30,7 +30,7 @@
   Called from libgen_h.c:16.
 [eva] libgen_h.c:16: 
   function dirname: precondition 'null_or_valid_string_path' got status valid.
-[eva:invalid-assigns] libgen_h.c:16: 
+[eva:assigns:invalid-location] libgen_h.c:16: 
   Completely invalid destination for assigns clause *(path + (0 ..)). Ignoring.
 [eva] Done for function dirname
 [eva:alarm] libgen_h.c:17: Warning: assertion got status unknown.
diff --git a/tests/libc/oracle/search_h.res.oracle b/tests/libc/oracle/search_h.res.oracle
index f3a24652dc25a198f18e79333b456cd0b9cff435..9367d7f9d122dbdff1e2b8e2473296626b6fc96c 100644
--- a/tests/libc/oracle/search_h.res.oracle
+++ b/tests/libc/oracle/search_h.res.oracle
@@ -41,7 +41,7 @@
 [eva] computing for function tsearch <- main.
   Called from search_h.c:34.
 [eva] using specification for function tsearch
-[eva:invalid-assigns] search_h.c:34: 
+[eva:assigns:invalid-location] search_h.c:34: 
   Completely invalid destination for assigns clause *compar. Ignoring.
 [eva] Done for function tsearch
 [eva:alarm] search_h.c:40: Warning: 
@@ -61,7 +61,7 @@
 [eva] computing for function twalk <- main.
   Called from search_h.c:46.
 [eva] using specification for function twalk
-[eva:invalid-assigns] search_h.c:46: 
+[eva:assigns:invalid-location] search_h.c:46: 
   Completely invalid destination for assigns clause *action. Ignoring.
 [eva] Done for function twalk
 [eva] Recording results for main
diff --git a/tests/libc/oracle/signal_h.res.oracle b/tests/libc/oracle/signal_h.res.oracle
index 1219ddf39fa0fd1ac3e62a1ef6bba43ab1dfb7b9..af6af2df61181de0c2eaff470c8ea9cd005698ad 100644
--- a/tests/libc/oracle/signal_h.res.oracle
+++ b/tests/libc/oracle/signal_h.res.oracle
@@ -83,7 +83,7 @@
   function sigprocmask: precondition 'valid_oldset_or_null' got status valid.
 [eva] signal_h.c:35: 
   function sigprocmask: precondition 'separation' got status valid.
-[eva:invalid-assigns] signal_h.c:35: 
+[eva:assigns:invalid-location] signal_h.c:35: 
   Completely invalid destination for assigns clause *oldset. Ignoring.
 [eva] Done for function sigprocmask
 [eva] computing for function sigprocmask <- main.
@@ -145,7 +145,7 @@
   function sigaction: precondition 'valid_read_act_or_null' got status valid.
 [eva] signal_h.c:51: 
   function sigaction: precondition 'separation,separated_acts' got status valid.
-[eva:invalid-assigns] signal_h.c:51: 
+[eva:assigns:invalid-location] signal_h.c:51: 
   Completely invalid destination for assigns clause *oldact. Ignoring.
 [eva] Done for function sigaction
 [eva] signal_h.c:55: assertion 'valid_nsig' got status valid.
diff --git a/tests/libc/oracle/socket_h.res.oracle b/tests/libc/oracle/socket_h.res.oracle
index d19a86d1f49df0b6281ef306b0e3f9ace0bc4edf..665bc6a7f7d34628cfcad314be829e731a507074 100644
--- a/tests/libc/oracle/socket_h.res.oracle
+++ b/tests/libc/oracle/socket_h.res.oracle
@@ -93,9 +93,9 @@
   function recvfrom: precondition 'valid_buffer_length' got status valid.
 [eva] socket_h.c:37: 
   function recvfrom: precondition 'valid_addrbuf_or_null,initialization' got status valid.
-[eva:invalid-assigns] socket_h.c:37: 
+[eva:assigns:invalid-location] socket_h.c:37: 
   Completely invalid destination for assigns clause *addrbuf_len. Ignoring.
-[eva:invalid-assigns] socket_h.c:37: 
+[eva:assigns:invalid-location] socket_h.c:37: 
   Completely invalid destination
   for assigns clause *((char *)addrbuf + (0 .. \old(*addrbuf_len) - 1)).
   Ignoring.
diff --git a/tests/libc/oracle/stdio_h.res.oracle b/tests/libc/oracle/stdio_h.res.oracle
index 501e3cbf6721700b16630e39626ebf133fa82927..5c49c9788af76c5b30f529a4432476ed64a9498c 100644
--- a/tests/libc/oracle/stdio_h.res.oracle
+++ b/tests/libc/oracle/stdio_h.res.oracle
@@ -204,7 +204,7 @@
 [eva:libc:unsupported-spec] stdio_h.c:99: Warning: 
   The specification of function 'vscanf' is currently not supported by Eva.
   Consider adding 'FRAMAC_SHARE/libc/stdio.c' to the analyzed source files.
-[eva] FRAMAC_SHARE/libc/stdio.h:276: Warning: 
+[eva:assigns:missing-result] FRAMAC_SHARE/libc/stdio.h:276: Warning: 
   no 'assigns \result \from ...' clause specified for function vscanf
 [eva] Done for function vscanf
 [eva] Recording results for caller_stub_for_vscanf
diff --git a/tests/libc/oracle/string_h.res.oracle b/tests/libc/oracle/string_h.res.oracle
index 6990b87fa3ba5e9731ee7c3dc7d88f2d7553a46f..ba0970af431e10d22ffccfd53459b858c7a719c2 100644
--- a/tests/libc/oracle/string_h.res.oracle
+++ b/tests/libc/oracle/string_h.res.oracle
@@ -174,7 +174,7 @@
   function strtok: precondition 'separation' got status valid.
 [eva] string_h.c:82: 
   function strtok, behavior new_str: precondition 'valid_string_s_or_delim_not_found' got status valid.
-[eva:invalid-assigns] string_h.c:82: 
+[eva:assigns:invalid-location] string_h.c:82: 
   Completely invalid destination for assigns clause *(s + (0 ..)). Ignoring.
 [eva] Done for function strtok
 [eva:alarm] string_h.c:83: Warning: check got status unknown.
@@ -273,7 +273,7 @@
   function strtok_r: precondition 'valid_saveptr' got status valid.
 [eva] string_h.c:112: 
   function strtok_r, behavior new_str: precondition 'valid_string_s_or_delim_not_found' got status valid.
-[eva:invalid-assigns] string_h.c:112: 
+[eva:assigns:invalid-location] string_h.c:112: 
   Completely invalid destination for assigns clause *(s + (0 ..)). Ignoring.
 [eva] Done for function strtok_r
 [eva:alarm] string_h.c:113: Warning: check got status unknown.
@@ -500,7 +500,7 @@
   Called from string_h.c:204.
 [eva] string_h.c:204: 
   function strsep: precondition 'valid_stringp' got status valid.
-[eva:invalid-assigns] string_h.c:204: 
+[eva:assigns:invalid-location] string_h.c:204: 
   Completely invalid destination for assigns clause *(*(stringp + (0 ..))).
   Ignoring.
 [eva] Done for function strsep
diff --git a/tests/libc/oracle/sys_select.res.oracle b/tests/libc/oracle/sys_select.res.oracle
index 1de303ea58ff3397cf97d94a8be16dbea3cc469a..730b009517292caee22f46aa4289fa76e21fb5eb 100644
--- a/tests/libc/oracle/sys_select.res.oracle
+++ b/tests/libc/oracle/sys_select.res.oracle
@@ -68,9 +68,9 @@
 [eva] sys_select.c:31: 
   function select: precondition 'errorfds' got status valid.
 [eva] sys_select.c:31: function select: precondition 'timeout' got status valid.
-[eva:invalid-assigns] sys_select.c:31: 
+[eva:assigns:invalid-location] sys_select.c:31: 
   Completely invalid destination for assigns clause *writefds. Ignoring.
-[eva:invalid-assigns] sys_select.c:31: 
+[eva:assigns:invalid-location] sys_select.c:31: 
   Completely invalid destination for assigns clause *errorfds. Ignoring.
 [eva] Done for function select
 [eva] computing for function FD_ISSET <- main.
diff --git a/tests/libc/oracle/sys_sendfile_h.res.oracle b/tests/libc/oracle/sys_sendfile_h.res.oracle
index 68cffb5124d14d5e0cc2feec3db4179d16f4bdab..0a2dd0c2fa31de40dda51a9b4ccc42dc41771514 100644
--- a/tests/libc/oracle/sys_sendfile_h.res.oracle
+++ b/tests/libc/oracle/sys_sendfile_h.res.oracle
@@ -52,7 +52,7 @@
   function sendfile: precondition 'valid_offset_or_null' got status valid.
 [eva] sys_sendfile_h.c:19: 
   function sendfile: precondition 'initialization,offset' got status valid.
-[eva:invalid-assigns] sys_sendfile_h.c:19: 
+[eva:assigns:invalid-location] sys_sendfile_h.c:19: 
   Completely invalid destination for assigns clause *offset. Ignoring.
 [eva] Done for function sendfile
 [eva] computing for function close <- main.
diff --git a/tests/libc/oracle/sys_time_h.res.oracle b/tests/libc/oracle/sys_time_h.res.oracle
index 5cf6085db2850f98415b2ee55f0537ae30c03ec6..ec2bc7917c503a1476ffbe6bde69c91e378ba89c 100644
--- a/tests/libc/oracle/sys_time_h.res.oracle
+++ b/tests/libc/oracle/sys_time_h.res.oracle
@@ -11,7 +11,7 @@
   function setitimer: precondition 'valid_new_value' got status valid.
 [eva] sys_time_h.c:6: 
   function setitimer: precondition 'old_value_null_or_valid' got status valid.
-[eva:invalid-assigns] sys_time_h.c:6: 
+[eva:assigns:invalid-location] sys_time_h.c:6: 
   Completely invalid destination for assigns clause *old_value. Ignoring.
 [eva] Done for function setitimer
 [eva] sys_time_h.c:7: assertion got status valid.
diff --git a/tests/libc/oracle/time_h.res.oracle b/tests/libc/oracle/time_h.res.oracle
index f8f4edbaefc073e47b71e067120b8e9ad3d4adf0..e0e2f3af74f1a814cd31b761eaf0eb097692d32b 100644
--- a/tests/libc/oracle/time_h.res.oracle
+++ b/tests/libc/oracle/time_h.res.oracle
@@ -37,7 +37,7 @@
   function nanosleep: precondition 'valid_nanosecs' got status valid.
 [eva] time_h.c:22: 
   function nanosleep: precondition 'valid_remaining_or_null' got status valid.
-[eva:invalid-assigns] time_h.c:22: 
+[eva:assigns:invalid-location] time_h.c:22: 
   Completely invalid destination for assigns clause *rmtp. Ignoring.
 [eva] Done for function nanosleep
 [eva] computing for function nanosleep <- main.
diff --git a/tests/libc/oracle/uchar_h.res.oracle b/tests/libc/oracle/uchar_h.res.oracle
index 82a0ae391735acd03045073e97a1f0bf7b214cc4..dbf44b8c1c81a06790c29759b8a1f01976d6d7a5 100644
--- a/tests/libc/oracle/uchar_h.res.oracle
+++ b/tests/libc/oracle/uchar_h.res.oracle
@@ -7,7 +7,7 @@
 [eva] computing for function mbrtoc8 <- main.
   Called from uchar_h.c:10.
 [eva] using specification for function mbrtoc8
-[eva:invalid-assigns] uchar_h.c:10: 
+[eva:assigns:invalid-location] uchar_h.c:10: 
   Completely invalid destination for assigns clause *ps. Ignoring.
 [eva] Done for function mbrtoc8
 [eva] computing for function mbrtoc8 <- main.
@@ -15,14 +15,14 @@
 [eva] Done for function mbrtoc8
 [eva] computing for function mbrtoc8 <- main.
   Called from uchar_h.c:12.
-[eva:invalid-assigns] uchar_h.c:12: 
+[eva:assigns:invalid-location] uchar_h.c:12: 
   Completely invalid destination for assigns clause *(pc8 + 0). Ignoring.
 [eva] Done for function mbrtoc8
 [eva] computing for function mbrtoc8 <- main.
   Called from uchar_h.c:13.
-[eva:invalid-assigns] uchar_h.c:13: 
+[eva:assigns:invalid-location] uchar_h.c:13: 
   Completely invalid destination for assigns clause *(pc8 + 0). Ignoring.
-[eva:invalid-assigns] uchar_h.c:13: 
+[eva:assigns:invalid-location] uchar_h.c:13: 
   Completely invalid destination for assigns clause *ps. Ignoring.
 [eva] Done for function mbrtoc8
 [eva] computing for function c8rtomb <- main.
@@ -31,22 +31,22 @@
 [eva] Done for function c8rtomb
 [eva] computing for function c8rtomb <- main.
   Called from uchar_h.c:15.
-[eva:invalid-assigns] uchar_h.c:15: 
+[eva:assigns:invalid-location] uchar_h.c:15: 
   Completely invalid destination for assigns clause *(s + (0 .. 16 - 1)).
   Ignoring.
 [eva] Done for function c8rtomb
 [eva] computing for function c8rtomb <- main.
   Called from uchar_h.c:16.
-[eva:invalid-assigns] uchar_h.c:16: 
+[eva:assigns:invalid-location] uchar_h.c:16: 
   Completely invalid destination for assigns clause *(s + (0 .. 16 - 1)).
   Ignoring.
-[eva:invalid-assigns] uchar_h.c:16: 
+[eva:assigns:invalid-location] uchar_h.c:16: 
   Completely invalid destination for assigns clause *ps. Ignoring.
 [eva] Done for function c8rtomb
 [eva] computing for function mbrtoc16 <- main.
   Called from uchar_h.c:20.
 [eva] using specification for function mbrtoc16
-[eva:invalid-assigns] uchar_h.c:20: 
+[eva:assigns:invalid-location] uchar_h.c:20: 
   Completely invalid destination for assigns clause *ps. Ignoring.
 [eva] Done for function mbrtoc16
 [eva] computing for function mbrtoc16 <- main.
@@ -54,14 +54,14 @@
 [eva] Done for function mbrtoc16
 [eva] computing for function mbrtoc16 <- main.
   Called from uchar_h.c:22.
-[eva:invalid-assigns] uchar_h.c:22: 
+[eva:assigns:invalid-location] uchar_h.c:22: 
   Completely invalid destination for assigns clause *(pc16 + 0). Ignoring.
 [eva] Done for function mbrtoc16
 [eva] computing for function mbrtoc16 <- main.
   Called from uchar_h.c:23.
-[eva:invalid-assigns] uchar_h.c:23: 
+[eva:assigns:invalid-location] uchar_h.c:23: 
   Completely invalid destination for assigns clause *(pc16 + 0). Ignoring.
-[eva:invalid-assigns] uchar_h.c:23: 
+[eva:assigns:invalid-location] uchar_h.c:23: 
   Completely invalid destination for assigns clause *ps. Ignoring.
 [eva] Done for function mbrtoc16
 [eva] computing for function c16rtomb <- main.
@@ -70,22 +70,22 @@
 [eva] Done for function c16rtomb
 [eva] computing for function c16rtomb <- main.
   Called from uchar_h.c:25.
-[eva:invalid-assigns] uchar_h.c:25: 
+[eva:assigns:invalid-location] uchar_h.c:25: 
   Completely invalid destination for assigns clause *(s + (0 .. 16 - 1)).
   Ignoring.
 [eva] Done for function c16rtomb
 [eva] computing for function c16rtomb <- main.
   Called from uchar_h.c:26.
-[eva:invalid-assigns] uchar_h.c:26: 
+[eva:assigns:invalid-location] uchar_h.c:26: 
   Completely invalid destination for assigns clause *(s + (0 .. 16 - 1)).
   Ignoring.
-[eva:invalid-assigns] uchar_h.c:26: 
+[eva:assigns:invalid-location] uchar_h.c:26: 
   Completely invalid destination for assigns clause *ps. Ignoring.
 [eva] Done for function c16rtomb
 [eva] computing for function mbrtoc32 <- main.
   Called from uchar_h.c:30.
 [eva] using specification for function mbrtoc32
-[eva:invalid-assigns] uchar_h.c:30: 
+[eva:assigns:invalid-location] uchar_h.c:30: 
   Completely invalid destination for assigns clause *ps. Ignoring.
 [eva] Done for function mbrtoc32
 [eva] computing for function mbrtoc32 <- main.
@@ -93,14 +93,14 @@
 [eva] Done for function mbrtoc32
 [eva] computing for function mbrtoc32 <- main.
   Called from uchar_h.c:32.
-[eva:invalid-assigns] uchar_h.c:32: 
+[eva:assigns:invalid-location] uchar_h.c:32: 
   Completely invalid destination for assigns clause *(pc32 + 0). Ignoring.
 [eva] Done for function mbrtoc32
 [eva] computing for function mbrtoc32 <- main.
   Called from uchar_h.c:33.
-[eva:invalid-assigns] uchar_h.c:33: 
+[eva:assigns:invalid-location] uchar_h.c:33: 
   Completely invalid destination for assigns clause *(pc32 + 0). Ignoring.
-[eva:invalid-assigns] uchar_h.c:33: 
+[eva:assigns:invalid-location] uchar_h.c:33: 
   Completely invalid destination for assigns clause *ps. Ignoring.
 [eva] Done for function mbrtoc32
 [eva] computing for function c32rtomb <- main.
@@ -109,16 +109,16 @@
 [eva] Done for function c32rtomb
 [eva] computing for function c32rtomb <- main.
   Called from uchar_h.c:35.
-[eva:invalid-assigns] uchar_h.c:35: 
+[eva:assigns:invalid-location] uchar_h.c:35: 
   Completely invalid destination for assigns clause *(s + (0 .. 16 - 1)).
   Ignoring.
 [eva] Done for function c32rtomb
 [eva] computing for function c32rtomb <- main.
   Called from uchar_h.c:36.
-[eva:invalid-assigns] uchar_h.c:36: 
+[eva:assigns:invalid-location] uchar_h.c:36: 
   Completely invalid destination for assigns clause *(s + (0 .. 16 - 1)).
   Ignoring.
-[eva:invalid-assigns] uchar_h.c:36: 
+[eva:assigns:invalid-location] uchar_h.c:36: 
   Completely invalid destination for assigns clause *ps. Ignoring.
 [eva] Done for function c32rtomb
 [eva] Recording results for main
diff --git a/tests/misc/oracle/audit-out.json b/tests/misc/oracle/audit-out.json
index 87a6533a18367d35d29ca8e57677ab9d3089565a..5a6d4556056dd40051fd1efbfbd7b23fd4407ee5 100644
--- a/tests/misc/oracle/audit-out.json
+++ b/tests/misc/oracle/audit-out.json
@@ -37,17 +37,17 @@
     },
     "warning-categories": {
       "enabled": [
-        "*", "alarm", "builtins", "builtins:missing-spec",
-        "builtins:override", "ensures-false", "experimental", "garbled-mix",
-        "libc", "libc:unsupported-spec", "locals-escaping", "loop-unroll",
-        "malloc", "malloc:imprecise", "signed-overflow", "taint",
-        "unknown-size"
+        "*", "alarm", "assigns", "assigns:missing", "assigns:missing-result",
+        "builtins", "builtins:missing-spec", "builtins:override",
+        "ensures-false", "experimental", "garbled-mix", "libc",
+        "libc:unsupported-spec", "locals-escaping", "loop-unroll", "malloc",
+        "malloc:imprecise", "signed-overflow", "taint", "unknown-size"
       ],
       "disabled": [
-        "garbled-mix:assigns", "garbled-mix:summary", "garbled-mix:write",
-        "invalid-assigns", "loop-unroll:auto", "loop-unroll:missing",
-        "loop-unroll:missing:for", "loop-unroll:partial", "malloc:weak",
-        "recursion", "watchpoint"
+        "assigns:invalid-location", "garbled-mix:assigns",
+        "garbled-mix:summary", "garbled-mix:write", "loop-unroll:auto",
+        "loop-unroll:missing", "loop-unroll:missing:for",
+        "loop-unroll:partial", "malloc:weak", "recursion", "watchpoint"
       ]
     }
   },
diff --git a/tests/sparecode/bts324.i b/tests/sparecode/bts324.i
index b41f4dc2c193f58846ef9acfcd0632223f73e6c4..e201f7edc8f489d5d19d96d6d152c47601ec0a78 100644
--- a/tests/sparecode/bts324.i
+++ b/tests/sparecode/bts324.i
@@ -8,10 +8,10 @@
 
 int i0, o0;
 
-/*@ assigns i0, o0 ; */
+/*@ assigns i0, o0 \from \nothing; */
 void loop_body (void) ;
 
-/*@ assigns *p_res; */
+/*@ assigns *p_res \from indirect:p_res; */
 void init (int * p_res) ;
 
 int is_ko = -1;
diff --git a/tests/sparecode/oracle/bts324.0.res.oracle b/tests/sparecode/oracle/bts324.0.res.oracle
index 980e5daafeeac0f2132bd1deb8786c2cc34d3421..42219df344b6d7cdedcd7f19bf15cf33f59280b1 100644
--- a/tests/sparecode/oracle/bts324.0.res.oracle
+++ b/tests/sparecode/oracle/bts324.0.res.oracle
@@ -11,12 +11,10 @@
 [eva] computing for function init <- main.
   Called from bts324.i:19.
 [eva] using specification for function init
-[eva] bts324.i:14: Warning: no \from part for clause 'assigns *p_res;'
 [eva] Done for function init
 [eva] computing for function loop_body <- main.
   Called from bts324.i:22.
 [eva] using specification for function loop_body
-[eva] bts324.i:11: Warning: no \from part for clause 'assigns i0, o0;'
 [eva] Done for function loop_body
 [eva:partition] bts324.i:21: starting to merge loop iterations
 [eva] computing for function loop_body <- main.
@@ -55,7 +53,8 @@
 [sparecode] remove unused global declarations...
 [sparecode] result in new project 'default without sparecode'.
 /* Generated by Frama-C */
-/*@ assigns *p_res; */
+/*@ assigns *p_res;
+    assigns *p_res \from (indirect: p_res); */
 void init(int *p_res);
 
 int is_ko = -1;
diff --git a/tests/sparecode/oracle/bts324.1.res.oracle b/tests/sparecode/oracle/bts324.1.res.oracle
index 08edb8bad3a52849427a4ecea8c2607c05216908..5eb1a9aa0a781997680ce29d76deb79351b5764f 100644
--- a/tests/sparecode/oracle/bts324.1.res.oracle
+++ b/tests/sparecode/oracle/bts324.1.res.oracle
@@ -11,12 +11,10 @@
 [eva] computing for function init <- main_bis.
   Called from bts324.i:26.
 [eva] using specification for function init
-[eva] bts324.i:14: Warning: no \from part for clause 'assigns *p_res;'
 [eva] Done for function init
 [eva] computing for function loop_body <- main_bis.
   Called from bts324.i:29.
 [eva] using specification for function loop_body
-[eva] bts324.i:11: Warning: no \from part for clause 'assigns i0, o0;'
 [eva] Done for function loop_body
 [eva:partition] bts324.i:28: starting to merge loop iterations
 [eva] computing for function loop_body <- main_bis.
@@ -59,10 +57,13 @@
 /* Generated by Frama-C */
 int i0;
 int o0;
-/*@ assigns i0, o0; */
+/*@ assigns i0, o0;
+    assigns i0 \from \nothing;
+    assigns o0 \from \nothing; */
 void loop_body(void);
 
-/*@ assigns *p_res; */
+/*@ assigns *p_res;
+    assigns *p_res \from (indirect: p_res); */
 void init(int *p_res);
 
 int is_ko = -1;
diff --git a/tests/sparecode/oracle/bts324.2.res.oracle b/tests/sparecode/oracle/bts324.2.res.oracle
index f9473d7383052c8eb9f8a8f3888d58e195b53d47..40be8d5e3742259109f069ce3fdee2ed49dbec84 100644
--- a/tests/sparecode/oracle/bts324.2.res.oracle
+++ b/tests/sparecode/oracle/bts324.2.res.oracle
@@ -11,12 +11,10 @@
 [eva] computing for function init <- main_ter.
   Called from bts324.i:35.
 [eva] using specification for function init
-[eva] bts324.i:14: Warning: no \from part for clause 'assigns *p_res;'
 [eva] Done for function init
 [eva] computing for function loop_body <- main_ter.
   Called from bts324.i:39.
 [eva] using specification for function loop_body
-[eva] bts324.i:11: Warning: no \from part for clause 'assigns i0, o0;'
 [eva] Done for function loop_body
 [eva:partition] bts324.i:37: starting to merge loop iterations
 [eva] computing for function loop_body <- main_ter.
@@ -59,10 +57,13 @@
 /* Generated by Frama-C */
 int i0;
 int o0;
-/*@ assigns i0, o0; */
+/*@ assigns i0, o0;
+    assigns i0 \from \nothing;
+    assigns o0 \from \nothing; */
 void loop_body(void);
 
-/*@ assigns *p_res; */
+/*@ assigns *p_res;
+    assigns *p_res \from (indirect: p_res); */
 void init(int *p_res);
 
 int is_ko = -1;
diff --git a/tests/sparecode/oracle/bts334.0.res.oracle b/tests/sparecode/oracle/bts334.0.res.oracle
index 62c9ca46f75a407ecb37953cc4f6901735272f23..4a326965681d9c718d66b3187482dc323c4673a4 100644
--- a/tests/sparecode/oracle/bts334.0.res.oracle
+++ b/tests/sparecode/oracle/bts334.0.res.oracle
@@ -18,7 +18,7 @@
 [eva] computing for function init <- main_init.
   Called from bts334.i:66.
 [eva] using specification for function init
-[eva] bts334.i:61: Warning: 
+[eva:assigns:missing-result] bts334.i:61: Warning: 
   no 'assigns \result \from ...' clause specified for function init
 [kernel] bts334.i:66: Warning: keeping only assigns from behaviors: default
 [eva] Done for function init
diff --git a/tests/sparecode/oracle/bts334.1.res.oracle b/tests/sparecode/oracle/bts334.1.res.oracle
index 06bc529abee892df2a4156cdecd0988a4b0ff9b4..76a21c8a6cc5196f49b3011c32c447c54329ea05 100644
--- a/tests/sparecode/oracle/bts334.1.res.oracle
+++ b/tests/sparecode/oracle/bts334.1.res.oracle
@@ -18,7 +18,7 @@
 [eva] computing for function init <- main_init.
   Called from bts334.i:66.
 [eva] using specification for function init
-[eva] bts334.i:61: Warning: 
+[eva:assigns:missing-result] bts334.i:61: Warning: 
   no 'assigns \result \from ...' clause specified for function init
 [kernel] bts334.i:66: Warning: keeping only assigns from behaviors: default
 [eva] Done for function init
diff --git a/tests/sparecode/oracle/bts334.2.res.oracle b/tests/sparecode/oracle/bts334.2.res.oracle
index a03e12ab714af782ecd637c6b1a0c54cb27658d8..5ca5138f126b75e665ee87ad34519052c7ec4e26 100644
--- a/tests/sparecode/oracle/bts334.2.res.oracle
+++ b/tests/sparecode/oracle/bts334.2.res.oracle
@@ -17,7 +17,7 @@
 [eva] computing for function init <- main_init.
   Called from bts334.i:66.
 [eva] using specification for function init
-[eva] bts334.i:61: Warning: 
+[eva:assigns:missing-result] bts334.i:61: Warning: 
   no 'assigns \result \from ...' clause specified for function init
 [kernel] bts334.i:66: Warning: keeping only assigns from behaviors: default
 [eva] Done for function init
diff --git a/tests/spec/default_assigns_bts0966.i b/tests/spec/default_assigns_bts0966.i
index 3aceabc5aabc09f475734f7e3f3e996d6c809a72..42806105a7681a827569d8d6311177d014fc4b54 100644
--- a/tests/spec/default_assigns_bts0966.i
+++ b/tests/spec/default_assigns_bts0966.i
@@ -12,17 +12,17 @@ enum states {
 };
 
 // contract with missing "complete behaviors"
-/*@ 
+/*@
     ensures \true;
     behavior from_init:
       assumes auto_states[Init] == 1;
       ensures (auto_states[Copy] == 1) && (auto_states[Init] == 0);
-      assigns auto_states[Init], auto_states[Copy];
+      assigns auto_states[Init], auto_states[Copy] \from \nothing;
 
     behavior from_other:
       assumes (auto_states[Init] == 0);
       assigns \nothing;
-     
+
 */
 void copy(int x);
 
diff --git a/tests/spec/generalized_check.i b/tests/spec/generalized_check.i
index 67f8b8d40922d3f1bc425e9010b77c45b54c2b12..b83679d2c9bf9c06f9cc2b1d60fe5a8fc2a20c17 100644
--- a/tests/spec/generalized_check.i
+++ b/tests/spec/generalized_check.i
@@ -6,7 +6,7 @@ PLUGIN:
 */
 /*@ check lemma easy_proof: \false; */ // should not be put in any environment
 /*@ check requires f_valid_x: \valid(x);
-    assigns *x;
+    assigns *x \from indirect:x;
     check ensures f_init_x: *x == 0;
 */
 void f(int* x) {
diff --git a/tests/spec/oracle/array_typedef.res.oracle b/tests/spec/oracle/array_typedef.res.oracle
index 37ea592e18d1c8d208547bd76b7f772ed3c43195..067a46f618bb8c26318818c1ee5c513613b099f5 100644
--- a/tests/spec/oracle/array_typedef.res.oracle
+++ b/tests/spec/oracle/array_typedef.res.oracle
@@ -24,7 +24,6 @@
 [eva] computing for function send_addr <- send_msg <- main.
   Called from array_typedef.c:15.
 [eva] using specification for function send_addr
-[eva] array_typedef.c:12: Warning: no \from part for clause 'assigns \empty;'
 [eva] Done for function send_addr
 [eva] Recording results for send_msg
 [eva] Done for function send_msg
diff --git a/tests/spec/oracle/default_assigns_bts0966.res.oracle b/tests/spec/oracle/default_assigns_bts0966.res.oracle
index 728ce51af93543be68e905a91274e29a393ded31..69fa1490ad0a57f860c6a117cc4f4d2134e0cc02 100644
--- a/tests/spec/oracle/default_assigns_bts0966.res.oracle
+++ b/tests/spec/oracle/default_assigns_bts0966.res.oracle
@@ -6,8 +6,6 @@
   Neither code nor explicit assigns for function copy,
    generating default clauses from the specification. See -generated-spec-* options for more info
 [eva] using specification for function copy
-[eva] default_assigns_bts0966.i:20: Warning: 
-  no \from part for clause 'assigns auto_states[Init], auto_states[Copy];'
 [eva] ====== VALUES COMPUTED ======
 [eva:final-states] Values at end of function main:
   auto_states[0] ∈ {0}
@@ -20,7 +18,7 @@
   In this function, 7 statements reached (out of 7): 100% coverage.
   ----------------------------------------------------------------------------
   Some errors and warnings have been raised during the analysis:
-    by the Eva analyzer:      0 errors    1 warning
+    by the Eva analyzer:      0 errors    0 warnings
     by the Frama-C kernel:    0 errors    1 warning
   ----------------------------------------------------------------------------
   0 alarms generated by the analysis.
@@ -37,11 +35,15 @@ enum states {
 int auto_states[4];
 /*@ ensures \true;
     assigns auto_states[Copy], auto_states[Init];
+    assigns auto_states[Copy] \from \nothing;
+    assigns auto_states[Init] \from \nothing;
     
     behavior from_init:
       assumes auto_states[Init] ≡ 1;
       ensures auto_states[Copy] ≡ 1 ∧ auto_states[Init] ≡ 0;
       assigns auto_states[Init], auto_states[Copy];
+      assigns auto_states[Init] \from \nothing;
+      assigns auto_states[Copy] \from \nothing;
     
     behavior from_other:
       assumes auto_states[Init] ≡ 0;
diff --git a/tests/spec/oracle/generalized_check.0.res.oracle b/tests/spec/oracle/generalized_check.0.res.oracle
index 0fb9927aa934253ed3519b9fda6f0dbfd3d2adfe..b56fab66c807791a015c86d59d318af3a852b82f 100644
--- a/tests/spec/oracle/generalized_check.0.res.oracle
+++ b/tests/spec/oracle/generalized_check.0.res.oracle
@@ -7,7 +7,6 @@
 [eva] using specification for function f
 [eva:alarm] generalized_check.i:24: Warning: 
   function f: precondition 'f_valid_x' got status unknown.
-[eva] generalized_check.i:9: Warning: no \from part for clause 'assigns *x;'
 [eva:alarm] generalized_check.i:25: Warning: 
   check 'main_valid_ko' got status unknown.
 [eva:alarm] generalized_check.i:26: Warning: 
@@ -29,9 +28,7 @@
   2 functions analyzed (out of 3): 66% coverage.
   In these functions, 25 statements reached (out of 25): 100% coverage.
   ----------------------------------------------------------------------------
-  Some errors and warnings have been raised during the analysis:
-    by the Eva analyzer:      0 errors    1 warning
-    by the Frama-C kernel:    0 errors    0 warnings
+  No errors or warnings raised during the analysis.
   ----------------------------------------------------------------------------
   1 alarm generated by the analysis:
        1 access to uninitialized left-values
diff --git a/tests/spec/oracle/generalized_check.1.res.oracle b/tests/spec/oracle/generalized_check.1.res.oracle
index 7e0503ac2ae81e3733b87703e497dee35f843332..258bcbb81d66189d0c98d11b01fb5a92c80d2df4 100644
--- a/tests/spec/oracle/generalized_check.1.res.oracle
+++ b/tests/spec/oracle/generalized_check.1.res.oracle
@@ -5,6 +5,7 @@
 /*@ check requires f_valid_x: \valid(x);
     check ensures f_init_x: *\old(x) ≡ 0;
     assigns *x;
+    assigns *x \from (indirect: x);
  */
 void f(int *x)
 {
diff --git a/tests/spec/oracle/statement_behavior.res.oracle b/tests/spec/oracle/statement_behavior.res.oracle
index f3594a563c4b2f46589fb8d4e9997c34ba7ce8ff..40a469ca62195bd3f37f6c333343033644096ee5 100644
--- a/tests/spec/oracle/statement_behavior.res.oracle
+++ b/tests/spec/oracle/statement_behavior.res.oracle
@@ -6,8 +6,6 @@
   
 [eva] computing for function pfsqopfc <- main.
   Called from statement_behavior.c:23.
-[eva] statement_behavior.c:10: Warning: 
-  no \from part for clause 'assigns five_times;'
 [eva:alarm] statement_behavior.c:17: Warning: assertion got status unknown.
 [eva:alarm] statement_behavior.c:5: Warning: 
   function pfsqopfc: postcondition got status unknown.
diff --git a/tests/spec/statement_behavior.c b/tests/spec/statement_behavior.c
index c8834f72c8ea2102631e6060ac6dc0c3acc9cc3c..3a3c8ae51da0558a06d0c8f340c37136051d695a 100644
--- a/tests/spec/statement_behavior.c
+++ b/tests/spec/statement_behavior.c
@@ -7,7 +7,7 @@ PLUGIN: eva,inout,scope
 int pfsqopfc(int x) {
 int five_times;
 /*@
-  assigns five_times;
+  assigns five_times \from x;
   ensures five_times == (int)(5 * x);
 */
 asm ("leal (%1,%1,4), %0"
diff --git a/tests/value/assigns.i b/tests/value/assigns.i
index a36a92073e6020daa3bbddc084c3d5b80a5ab376..459bb27daa165d8ace3dc1c45651781cb4baeeed 100644
--- a/tests/value/assigns.i
+++ b/tests/value/assigns.i
@@ -1,5 +1,5 @@
 /* run.config*
-   STDOPT: +"-print -inout"
+   STDOPT: +"-print -inout -eva-warn-key assigns:missing=active"
 */
 volatile int v;
 int G;
@@ -50,7 +50,7 @@ void main1(void)
 
   g(2 * (int)(&T) );
   h((int*)(2 * (int)(&t3)));
-  
+
   j((int*)(T+9));
 
   assigns_post(18);
diff --git a/tests/value/lock.i b/tests/value/lock.i
index a73d927e72c3ade360db55650f887241d40fa739..e928c1203b168c3d93f79ffa520d666fe40e491f 100644
--- a/tests/value/lock.i
+++ b/tests/value/lock.i
@@ -18,7 +18,7 @@
 /*@
   requires !(locked(m));
   ensures locked(m);
-  assigns ghost_loctable[0..99];
+  assigns ghost_loctable[0..99] \from indirect:*m;
 
  */
 void acquire_lock(struct mutex *m);
@@ -26,14 +26,14 @@ void acquire_lock(struct mutex *m);
 /*@
   requires locked(m);
   ensures !(locked(m));
-  assigns ghost_loctable[..];
+  assigns ghost_loctable[..] \from indirect:*m;
 
  */
 void release_lock(struct mutex *m);
 
 /*@
   requires !(locked(m));
-  assigns ghost_loctable[..];
+  assigns ghost_loctable[..] \from indirect:*m;
   behavior success:
   ensures (\result != 0) ==> locked(m);
 
@@ -43,11 +43,12 @@ void release_lock(struct mutex *m);
  */
 int try_acquire_lock(struct mutex *m);
 
-struct mutex *pmutex;
+struct mutex { int __id; };
+extern struct mutex mutex;
 
-/*@ requires !(locked(pmutex)); */
+/*@ requires !(locked(&mutex)); */
 void locks0_good(int flag)
 {
-    acquire_lock(pmutex);
-    release_lock(pmutex);
+    acquire_lock(&mutex);
+    release_lock(&mutex);
 }
diff --git a/tests/value/oracle/assigns.res.oracle b/tests/value/oracle/assigns.res.oracle
index a0290280a5fc1643491abf4785f33b59f681ddb9..5de66d92722b49b5da0103914fd328e5cdf8b940 100644
--- a/tests/value/oracle/assigns.res.oracle
+++ b/tests/value/oracle/assigns.res.oracle
@@ -79,9 +79,10 @@
 [eva] computing for function assigns_post <- main1 <- main.
   Called from assigns.i:56.
 [eva] using specification for function assigns_post
-[eva] assigns.i:39: Warning: 
-  no \from part
-  for clause 'assigns Tpost[\at(\old(i),Post)], Tpost[\at(k,Post)];'
+[eva:assigns:missing] assigns.i:39: Warning: 
+  no \from part for clause
+  'assigns Tpost[\at(\old(i),Post)], Tpost[\at(k,Post)];'.
+  Assuming \from \nothing so that the analysis can continue, but be aware this is probably incorrect.
 [eva] assigns.i:56: Warning: 
   cannot interpret \from clause \at(x,Post)
   (no environment to evaluate \at(_,Post)); effects will be ignored
@@ -99,13 +100,15 @@
 [eva] computing for function ff1 <- main2 <- main.
   Called from assigns.i:76.
 [eva] using specification for function ff1
-[eva] assigns.i:60: Warning: 
+[eva:assigns:missing-result] assigns.i:60: Warning: 
   no 'assigns \result \from ...' clause specified for function ff1
 [eva] Done for function ff1
 [eva] computing for function ff3 <- main2 <- main.
   Called from assigns.i:78.
 [eva] using specification for function ff3
-[eva] assigns.i:68: Warning: no \from part for clause 'assigns y1, y3;'
+[eva:assigns:missing] assigns.i:68: Warning: 
+  no \from part for clause 'assigns y1, y3;'.
+  Assuming \from \nothing so that the analysis can continue, but be aware this is probably incorrect.
 [eva] Done for function ff3
 [kernel:annot:missing-spec] assigns.i:79: Warning: 
   Neither code nor specification for function ff4,
@@ -131,7 +134,7 @@
 [eva] computing for function ff2_bis <- main2 <- main.
   Called from assigns.i:83.
 [eva] using specification for function ff2_bis
-[eva] assigns.i:64: Warning: 
+[eva:assigns:missing-result] assigns.i:64: Warning: 
   no 'assigns \result \from ...' clause specified for function ff2_bis
 [eva] Done for function ff2_bis
 [eva:alarm] assigns.i:84: Warning: 
diff --git a/tests/value/oracle/cast_fun.res.oracle b/tests/value/oracle/cast_fun.res.oracle
index c9083de743142ba756293ace6ed9478267b3ca3d..a0f86efd2c32fa461579b0ffbb0377df3a5a4d92 100644
--- a/tests/value/oracle/cast_fun.res.oracle
+++ b/tests/value/oracle/cast_fun.res.oracle
@@ -41,7 +41,7 @@
 [eva] computing for function f1 <- main.
   Called from cast_fun.i:60.
 [eva] using specification for function f1
-[eva] cast_fun.i:6: Warning: 
+[eva:assigns:missing-result] cast_fun.i:6: Warning: 
   no 'assigns \result \from ...' clause specified for function f1
 [eva] Done for function f1
 [eva:alarm] cast_fun.i:65: Warning: 
@@ -49,13 +49,13 @@
 [eva] computing for function f2 <- main.
   Called from cast_fun.i:65.
 [eva] using specification for function f2
-[eva] cast_fun.i:8: Warning: 
+[eva:assigns:missing-result] cast_fun.i:8: Warning: 
   no 'assigns \result \from ...' clause specified for function f2
 [eva] Done for function f2
 [eva] computing for function f3 <- main.
   Called from cast_fun.i:70.
 [eva] using specification for function f3
-[eva] cast_fun.i:10: Warning: 
+[eva:assigns:missing-result] cast_fun.i:10: Warning: 
   no 'assigns \result \from ...' clause specified for function f3
 [eva] Done for function f3
 [eva] computing for function f3 <- main.
diff --git a/tests/value/oracle/leaf_spec.0.res.oracle b/tests/value/oracle/leaf_spec.0.res.oracle
index 9d1932aa482eece15fb1af19cb6a2e1c98beb281..fb936dc43f79dc32a4176877aa639cc7e00d0030 100644
--- a/tests/value/oracle/leaf_spec.0.res.oracle
+++ b/tests/value/oracle/leaf_spec.0.res.oracle
@@ -31,7 +31,7 @@
 [eva] computing for function k <- main.
   Called from leaf_spec.i:22.
 [eva] using specification for function k
-[eva:invalid-assigns] leaf_spec.i:22: 
+[eva:assigns:invalid-location] leaf_spec.i:22: 
   Completely invalid destination for assigns clause *l. Ignoring.
 [eva] Done for function k
 [kernel:annot:missing-spec] leaf_spec.i:22: Warning: 
diff --git a/tests/value/oracle/leaf_spec.1.res.oracle b/tests/value/oracle/leaf_spec.1.res.oracle
index f47d633f23ac1ee42e1fc1f98b1918dfbd95d7a4..dd179ff3717724142d56e235564c04902c95e4f7 100644
--- a/tests/value/oracle/leaf_spec.1.res.oracle
+++ b/tests/value/oracle/leaf_spec.1.res.oracle
@@ -10,9 +10,9 @@
 [eva] computing for function f <- main1.
   Called from leaf_spec.i:27.
 [eva] using specification for function f
-[eva:invalid-assigns] leaf_spec.i:27: 
+[eva:assigns:invalid-location] leaf_spec.i:27: 
   Completely invalid destination for assigns clause *x. Ignoring.
-[eva:invalid-assigns] leaf_spec.i:27: 
+[eva:assigns:invalid-location] leaf_spec.i:27: 
   Completely invalid destination for assigns clause *y. Ignoring.
 [eva] Done for function f
 [eva] Recording results for main1
diff --git a/tests/value/oracle/library_precond.res.oracle b/tests/value/oracle/library_precond.res.oracle
index c9a910c9cee742592dcdf5467549c12a765f13d8..0824f2e6161a54549f46aafa9374d95f638fa552 100644
--- a/tests/value/oracle/library_precond.res.oracle
+++ b/tests/value/oracle/library_precond.res.oracle
@@ -7,7 +7,7 @@
 [eva] computing for function mxml <- main.
   Called from library_precond.i:9.
 [eva] using specification for function mxml
-[eva] library_precond.i:5: Warning: 
+[eva:assigns:missing-result] library_precond.i:5: Warning: 
   no 'assigns \result \from ...' clause specified for function mxml
 [eva:alarm] library_precond.i:9: Warning: 
   function mxml: precondition got status invalid.
diff --git a/tests/value/oracle/lock.res.oracle b/tests/value/oracle/lock.res.oracle
index 6bcf2c8b534d7de58ffeb476a98ce9ea537a95c5..ceba5a0de8cfe17dbe3ebb5dc87ca2be9a3de63f 100644
--- a/tests/value/oracle/lock.res.oracle
+++ b/tests/value/oracle/lock.res.oracle
@@ -4,23 +4,20 @@
 [eva] Initial state computed
 [eva:initial-state] Values of globals at initialization
   ghost_loctable[0..99] ∈ {0}
-  pmutex ∈ {0}
-[eva:alarm] lock.i:48: Warning: 
+  mutex ∈ [--..--]
+[eva:alarm] lock.i:49: Warning: 
   function locks0_good: precondition got status unknown.
 [eva] computing for function acquire_lock <- locks0_good.
-  Called from lock.i:51.
+  Called from lock.i:52.
 [eva] using specification for function acquire_lock
-[eva:alarm] lock.i:51: Warning: 
+[eva:alarm] lock.i:52: Warning: 
   function acquire_lock: precondition got status unknown.
-[eva] lock.i:21: Warning: 
-  no \from part for clause 'assigns ghost_loctable[0 .. 99];'
 [eva] Done for function acquire_lock
 [eva] computing for function release_lock <- locks0_good.
-  Called from lock.i:52.
+  Called from lock.i:53.
 [eva] using specification for function release_lock
-[eva:alarm] lock.i:52: Warning: 
+[eva:alarm] lock.i:53: Warning: 
   function release_lock: precondition got status unknown.
-[eva] lock.i:29: Warning: no \from part for clause 'assigns ghost_loctable[..];'
 [eva] Done for function release_lock
 [eva] Recording results for locks0_good
 [eva] Done for function locks0_good
@@ -36,13 +33,13 @@
 [from] ====== DEPENDENCIES COMPUTED ======
   These dependencies hold at termination for the executions that terminate:
 [from] Function acquire_lock:
-  ghost_loctable[0..99] FROM ANYTHING(origin:Unknown) (and SELF)
+  ghost_loctable[0..99] FROM mutex
 [from] Function release_lock:
-  ghost_loctable[0..99] FROM ANYTHING(origin:Unknown) (and SELF)
+  ghost_loctable[0..99] FROM mutex
 [from] Function locks0_good:
-  ghost_loctable[0..99] FROM ANYTHING(origin:Unknown) (and SELF)
+  ghost_loctable[0..99] FROM mutex
 [from] ====== END OF DEPENDENCIES ======
 [inout] Out (internal) for function locks0_good:
     ghost_loctable[0..99]
 [inout] Inputs for function locks0_good:
-    ANYTHING(origin:Unknown)
+    mutex
diff --git a/tests/value/oracle/recursion.2.res.oracle b/tests/value/oracle/recursion.2.res.oracle
index 770f9b3691b3f3e85e52c8678dfb04418388daf6..7c23fb2f46bdc345a531f6c51dd40c56e694ed4a 100644
--- a/tests/value/oracle/recursion.2.res.oracle
+++ b/tests/value/oracle/recursion.2.res.oracle
@@ -7,11 +7,10 @@
 [eva] recursion.c:433: Frama_C_show_each_10: {10}
 [eva] recursion.c:438: Frama_C_show_each_36: {36}
 [eva] using specification for function Frama_C_interval
-[eva] recursion.c:426: User Error: 
+[eva:assigns:missing] recursion.c:426: Warning: 
   Recursive call to sum_nospec without assigns clause.
-  Generating probably incomplete assigns to interpret the call. Try to increase
-  the -eva-unroll-recursive-calls parameter or write a correct specification
-  for function sum_nospec.
+  Generating probably incomplete assigns to interpret the call.
+  Try to increase the -eva-unroll-recursive-calls parameter or write a correct specification for function sum_nospec.
 [eva] using specification for function sum_nospec
 [eva] recursion.c:442: Frama_C_show_each_unreachable: [-2147483648..2147483647]
 [eva] ====== VALUES COMPUTED ======
@@ -51,5 +50,5 @@
     Frama_C_entropy_source; x; y; tmp; tmp_0; tmp_1
 [inout] Inputs for function main_fail:
     Frama_C_entropy_source
-[eva] User Error: Deferred error message was emitted during execution. See above messages for more information.
+[eva] Warning: warning assigns:missing treated as deferred error. See above messages for more information.
 [kernel] Plug-in eva aborted: invalid user input.
diff --git a/tests/value/oracle/strings.res.oracle b/tests/value/oracle/strings.res.oracle
index e07c92d0d5dcf8d5efe1fc2b5ae5b8d42e44b112..1305ac1781b2ce7a2729dd397e415aa3c74bf9c9 100644
--- a/tests/value/oracle/strings.res.oracle
+++ b/tests/value/oracle/strings.res.oracle
@@ -165,8 +165,6 @@
 [eva] computing for function assigns <- long_chain <- main.
   Called from strings.i:135.
 [eva] using specification for function assigns
-[eva] strings.i:129: Warning: 
-  no \from part for clause 'assigns *(p + (0 .. s - 1));'
 [eva] Done for function assigns
 [eva] computing for function strcmp <- long_chain <- main.
   Called from strings.i:136.
@@ -323,11 +321,11 @@
 [from] ====== DEPENDENCIES COMPUTED ======
   These dependencies hold at termination for the executions that terminate:
 [from] Function assigns:
-  tc[0..29] FROM ANYTHING(origin:Unknown) (and SELF)
+  tc[0..29] FROM nondet
 [from] Function strcmp:
   \result FROM s1_0; s2_0; tc[0..29]; long_chain_0[0..30]
 [from] Function long_chain:
-  \result FROM ANYTHING(origin:Unknown)
+  \result FROM nondet
 [from] Function strcpy:
   NON TERMINATING - NO EFFECTS
 [from] Function string_writes:
@@ -385,7 +383,7 @@
 [inout] Out (internal) for function long_chain:
     tc[0..29]; long_chain_0[0..31]; x
 [inout] Inputs for function long_chain:
-    ANYTHING(origin:Unknown)
+    nondet
 [inout] Out (internal) for function strcpy:
     src; ldst; b[0..4]; tmp_unfold_46; tmp_1_unfold_46; tmp_0_unfold_46;
     tmp_unfold_49; tmp_1_unfold_49; tmp_0_unfold_49; tmp_unfold_52;
@@ -421,4 +419,5 @@
 [inout] Out (internal) for function main:
     s1{[3]; [6]}; s5; s6; cc; Q; R; S; T; U; V; W; X; Y; Z
 [inout] Inputs for function main:
-    ANYTHING(origin:Unknown)
+    nondet; s1[0..5]; s3; s4; s5; s6; s7; s8; cc; "tutu"[bits 0 to 7];
+    "toto"[bits 0 to 7]
diff --git a/tests/value/oracle/use_spec.0.res.oracle b/tests/value/oracle/use_spec.0.res.oracle
index 860675533da474100fdec794e7fa88d4b497a4d1..942c944e4ecaa136ff3b103a4c2a9a2fa22292fb 100644
--- a/tests/value/oracle/use_spec.0.res.oracle
+++ b/tests/value/oracle/use_spec.0.res.oracle
@@ -1,7 +1,6 @@
 [kernel] Parsing use_spec.i (no preprocessing)
-[eva] User Error: no assigns specified for function 'f', for which a builtin
-  or the specification will be used. Potential unsoundness.
-[eva] Warning: Generating potentially incorrect assigns for function 'f' for which option -eva-use-spec is set
+[eva:assigns:missing] Warning: 
+  No assigns specified for function 'f' for which option -eva-use-spec is set. Generating potentially incorrect assigns.
 [eva] Analyzing a complete application starting at main
 [eva] Computing initial state
 [eva] Initial state computed
@@ -75,5 +74,5 @@
     x; y
   Sure outputs:
     w; z
-[eva] User Error: Deferred error message was emitted during execution. See above messages for more information.
+[eva] Warning: warning assigns:missing treated as deferred error. See above messages for more information.
 [kernel] Plug-in eva aborted: invalid user input.
diff --git a/tests/value/oracle/use_spec.1.res.oracle b/tests/value/oracle/use_spec.1.res.oracle
index 88fa49960f6ea16fb0c275670748ff79cfa95df0..ceeb03a639742555ef684cd431159b8abe3c0bc6 100644
--- a/tests/value/oracle/use_spec.1.res.oracle
+++ b/tests/value/oracle/use_spec.1.res.oracle
@@ -1,7 +1,6 @@
 [kernel] Parsing use_spec.i (no preprocessing)
-[eva] User Error: no assigns specified for function 'f', for which a builtin
-  or the specification will be used. Potential unsoundness.
-[eva] Warning: Generating potentially incorrect assigns for function 'f' for which option -eva-use-spec is set
+[eva:assigns:missing] Warning: 
+  No assigns specified for function 'f' for which option -eva-use-spec is set. Generating potentially incorrect assigns.
 [eva] Analyzing a complete application starting at main
 [eva] Computing initial state
 [eva] Initial state computed
@@ -75,5 +74,5 @@
     x; y
   Sure outputs:
     w; z
-[eva] User Error: Deferred error message was emitted during execution. See above messages for more information.
+[eva] Warning: warning assigns:missing treated as deferred error. See above messages for more information.
 [kernel] Plug-in eva aborted: invalid user input.
diff --git a/tests/value/strings.i b/tests/value/strings.i
index fbb7d4654212d35b89d08a8ad9aca758caa09ab0..a2960e19e15a64cf62ba2e9e9a82a3214a24574a 100644
--- a/tests/value/strings.i
+++ b/tests/value/strings.i
@@ -126,7 +126,7 @@ int strcmp(const char *s1, const char *s2)
   return (*(unsigned char *)s1 - *(unsigned char *)--s2);
 }
 
-//@ assigns p[0..s-1]; ensures \initialized(&p[0..s-1]);
+//@ assigns p[0..s-1] \from indirect:nondet; ensures \initialized(&p[0..s-1]);
 void assigns(char *p, unsigned int s);
 
 int long_chain() {