diff --git a/src/plugins/value/engine/transfer_stmt.ml b/src/plugins/value/engine/transfer_stmt.ml
index 7ba3de0d199c4f9439b87c9657f175d8ff83fc09..871cd1a2e967be8289afa2caf97acea54e2632a8 100644
--- a/src/plugins/value/engine/transfer_stmt.ml
+++ b/src/plugins/value/engine/transfer_stmt.ml
@@ -80,15 +80,11 @@ let do_copy_at = function
       not (warn_indeterminate kf)
     with Not_found -> assert false
 
-(* Warn for arguments that contain uninitialized/escaping if:
-   - kf is a non-special leaf function (TODO: should we keep this?)
-   - the user asked for this *)
+(* Warn for call arguments that contain uninitialized/escaping except on
+   [Frama_C_show_each] directives or if the user disables these alarms. *)
 let is_determinate kf =
   let name = Kernel_function.get_name kf in
-  warn_indeterminate kf
-  || not (Kernel_function.is_definition kf (* Should we keep this? *)
-          || (name >= "Frama_C" && name < "Frama_D")
-          || Builtins.is_builtin_overridden kf)
+  warn_indeterminate kf && not (Ast_info.is_frama_c_builtin name)
 
 let subdivide_stmt = Value_util.get_subdivision
 
diff --git a/src/plugins/value/value_parameters.ml b/src/plugins/value/value_parameters.ml
index e1ebdb444a629b48de1a4a035ca971c42e172067..00aa3166f88de075b0042ed0a7a5cccd34807ebd 100644
--- a/src/plugins/value/value_parameters.ml
+++ b/src/plugins/value/value_parameters.ml
@@ -489,7 +489,7 @@ let () =
           specification is used@ to interpret them.@]")
 
 let () = Parameter_customize.set_group alarms
-
+let () = Parameter_customize.argument_may_be_fundecl ();
 module WarnCopyIndeterminate =
   Kernel_function_set
     (struct
diff --git a/tests/float/oracle/math_builtins.res.oracle b/tests/float/oracle/math_builtins.res.oracle
index a940ec4e07c8d120b964d51d2812f0735d358098..d26ea5986d7f6f4b7d8f01bb1f4ecbfb33efa5dd 100644
--- a/tests/float/oracle/math_builtins.res.oracle
+++ b/tests/float/oracle/math_builtins.res.oracle
@@ -52,6 +52,8 @@
 [eva] tests/float/math_builtins.c:33: Call to builtin acos
 [eva] tests/float/math_builtins.c:33: 
   function acos: precondition 'in_domain' got status valid.
+[eva:alarm] tests/float/math_builtins.c:34: Warning: 
+  non-finite double value. assert \is_finite(any_double);
 [eva] tests/float/math_builtins.c:34: Call to builtin acos
 [eva:alarm] tests/float/math_builtins.c:34: Warning: 
   function acos: precondition 'in_domain' got status unknown.
@@ -83,6 +85,8 @@
 [eva] tests/float/math_builtins.c:50: Call to builtin acosf
 [eva] tests/float/math_builtins.c:50: 
   function acosf: precondition 'in_domain' got status valid.
+[eva:alarm] tests/float/math_builtins.c:51: Warning: 
+  non-finite float value. assert \is_finite(any_float);
 [eva] tests/float/math_builtins.c:51: Call to builtin acosf
 [eva:alarm] tests/float/math_builtins.c:51: Warning: 
   function acosf: precondition 'in_domain' got status unknown.
@@ -102,6 +106,8 @@
 [eva] tests/float/math_builtins.c:61: Call to builtin asin
 [eva] tests/float/math_builtins.c:61: 
   function asin: precondition 'in_domain' got status valid.
+[eva:alarm] tests/float/math_builtins.c:62: Warning: 
+  non-finite double value. assert \is_finite(any_double);
 [eva] tests/float/math_builtins.c:62: Call to builtin asin
 [eva:alarm] tests/float/math_builtins.c:62: Warning: 
   function asin: precondition 'in_domain' got status unknown.
@@ -133,6 +139,8 @@
 [eva] tests/float/math_builtins.c:78: Call to builtin asinf
 [eva] tests/float/math_builtins.c:78: 
   function asinf: precondition 'in_domain' got status valid.
+[eva:alarm] tests/float/math_builtins.c:79: Warning: 
+  non-finite float value. assert \is_finite(any_float);
 [eva] tests/float/math_builtins.c:79: Call to builtin asinf
 [eva:alarm] tests/float/math_builtins.c:79: Warning: 
   function asinf: precondition 'in_domain' got status unknown.
@@ -146,9 +154,11 @@
 [eva] tests/float/math_builtins.c:87: Call to builtin atan
 [eva] tests/float/math_builtins.c:87: 
   function atan: precondition 'number_arg' got status valid.
-[eva] tests/float/math_builtins.c:88: Call to builtin atan
 [eva:alarm] tests/float/math_builtins.c:88: Warning: 
-  function atan: precondition 'number_arg' got status unknown.
+  non-finite double value. assert \is_finite(any_double);
+[eva] tests/float/math_builtins.c:88: Call to builtin atan
+[eva] tests/float/math_builtins.c:88: 
+  function atan: precondition 'number_arg' got status valid.
 [eva] tests/float/math_builtins.c:89: Call to builtin atan
 [eva] tests/float/math_builtins.c:89: 
   function atan: precondition 'number_arg' got status valid.
@@ -165,9 +175,11 @@
 [eva] tests/float/math_builtins.c:94: Call to builtin atanf
 [eva] tests/float/math_builtins.c:94: 
   function atanf: precondition 'number_arg' got status valid.
-[eva] tests/float/math_builtins.c:95: Call to builtin atanf
 [eva:alarm] tests/float/math_builtins.c:95: Warning: 
-  function atanf: precondition 'number_arg' got status unknown.
+  non-finite float value. assert \is_finite(any_float);
+[eva] tests/float/math_builtins.c:95: Call to builtin atanf
+[eva] tests/float/math_builtins.c:95: 
+  function atanf: precondition 'number_arg' got status valid.
 [eva] Recording results for test_atan
 [eva] Done for function test_atan
 [eva] computing for function test_atan2_det <- main.
@@ -3030,6 +3042,7 @@ void test_acos(void)
   double half_pi = acos(0.);
   double pi = acos(- 1.);
   double zero = acos(1.);
+  /*@ assert Eva: is_nan_or_infinite: \is_finite(any_double); */
   double acos_image = acos(any_double);
   if (nondet) {
     double bottom = acos(- 1.5);
@@ -3046,6 +3059,7 @@ void test_acos(void)
   float f32__half_pi = acosf(0.f);
   float f32__pi = acosf(- 1.f);
   float f32__zero = acosf(1.f);
+  /*@ assert Eva: is_nan_or_infinite: \is_finite(any_float); */
   float f32__acosf_image = acosf(any_float);
   if (nondet) {
     float bottom_1 = acosf(2.f);
@@ -3059,6 +3073,7 @@ void test_asin(void)
   double zero = asin(0.);
   double minus_half_pi = asin(- 1.);
   double half_pi = asin(1.);
+  /*@ assert Eva: is_nan_or_infinite: \is_finite(any_double); */
   double asin_image = asin(any_double);
   if (nondet) {
     double bottom = asin(- 1.5);
@@ -3075,6 +3090,7 @@ void test_asin(void)
   float f32__zero = asinf(0.f);
   float f32__minus_half_pi = asinf(- 1.f);
   float f32__half_pi = asinf(1.f);
+  /*@ assert Eva: is_nan_or_infinite: \is_finite(any_float); */
   float f32__asinf_image = asinf(any_float);
   if (nondet) {
     float bottom_1 = asinf(2.f);
@@ -3086,12 +3102,14 @@ void test_asin(void)
 void test_atan(void)
 {
   double zero = atan(0.);
+  /*@ assert Eva: is_nan_or_infinite: \is_finite(any_double); */
   double atan_image = atan(any_double);
   double d64__x = atan(- 2.);
   double d64__y = atan(2.);
   double d64__xy = double_interval(- 2.,2.);
   d64__xy = atan(d64__xy);
   float f32__zero = atanf(0.f);
+  /*@ assert Eva: is_nan_or_infinite: \is_finite(any_float); */
   float f32__atanf_image = atanf(any_float);
   return;
 }
diff --git a/tests/libc/oracle/math_h.1.res.oracle b/tests/libc/oracle/math_h.1.res.oracle
index a2d2aea1a03b92001e491fd95188438caf24580c..40514ec227f70926aff9e222e1eaf5bdb39acfe8 100644
--- a/tests/libc/oracle/math_h.1.res.oracle
+++ b/tests/libc/oracle/math_h.1.res.oracle
@@ -58,9 +58,11 @@
 [eva] tests/libc/math_h.c:86: Call to builtin atan
 [eva] tests/libc/math_h.c:86: 
   function atan: precondition 'number_arg' got status valid.
-[eva] tests/libc/math_h.c:86: Call to builtin atan
 [eva:alarm] tests/libc/math_h.c:86: Warning: 
-  function atan: precondition 'number_arg' got status unknown.
+  NaN double value. assert ¬\is_NaN(top);
+[eva] tests/libc/math_h.c:86: Call to builtin atan
+[eva] tests/libc/math_h.c:86: 
+  function atan: precondition 'number_arg' got status valid.
 [eva] tests/libc/math_h.c:86: Call to builtin atanf
 [eva] tests/libc/math_h.c:86: 
   function atanf: precondition 'number_arg' got status valid.
@@ -85,9 +87,11 @@
 [eva] tests/libc/math_h.c:86: Call to builtin atanf
 [eva] tests/libc/math_h.c:86: 
   function atanf: precondition 'number_arg' got status valid.
-[eva] tests/libc/math_h.c:86: Call to builtin atanf
 [eva:alarm] tests/libc/math_h.c:86: Warning: 
-  function atanf: precondition 'number_arg' got status unknown.
+  NaN float value. assert ¬\is_NaN(f_top);
+[eva] tests/libc/math_h.c:86: Call to builtin atanf
+[eva] tests/libc/math_h.c:86: 
+  function atanf: precondition 'number_arg' got status valid.
 [eva] computing for function atanl <- main.
   Called from tests/libc/math_h.c:86.
 [eva] using specification for function atanl
diff --git a/tests/libc/oracle/math_h.2.res.oracle b/tests/libc/oracle/math_h.2.res.oracle
index 2caf779ac2d3dbe01b4529a7926554c84e3dbe36..1b33d5c77ca0a0d02adf9f26b470133fbadf95bc 100644
--- a/tests/libc/oracle/math_h.2.res.oracle
+++ b/tests/libc/oracle/math_h.2.res.oracle
@@ -51,9 +51,11 @@
 [eva] tests/libc/math_h.c:86: Call to builtin atan
 [eva] tests/libc/math_h.c:86: 
   function atan: precondition 'number_arg' got status valid.
-[eva] tests/libc/math_h.c:86: Call to builtin atan
 [eva:alarm] tests/libc/math_h.c:86: Warning: 
-  function atan: precondition 'number_arg' got status unknown.
+  non-finite double value. assert \is_finite(top);
+[eva] tests/libc/math_h.c:86: Call to builtin atan
+[eva] tests/libc/math_h.c:86: 
+  function atan: precondition 'number_arg' got status valid.
 [eva] tests/libc/math_h.c:86: Call to builtin atanf
 [eva] tests/libc/math_h.c:86: 
   function atanf: precondition 'number_arg' got status valid.
@@ -78,9 +80,11 @@
 [eva] tests/libc/math_h.c:86: Call to builtin atanf
 [eva] tests/libc/math_h.c:86: 
   function atanf: precondition 'number_arg' got status valid.
-[eva] tests/libc/math_h.c:86: Call to builtin atanf
 [eva:alarm] tests/libc/math_h.c:86: Warning: 
-  function atanf: precondition 'number_arg' got status unknown.
+  non-finite float value. assert \is_finite(f_top);
+[eva] tests/libc/math_h.c:86: Call to builtin atanf
+[eva] tests/libc/math_h.c:86: 
+  function atanf: precondition 'number_arg' got status valid.
 [eva] computing for function atanl <- main.
   Called from tests/libc/math_h.c:86.
 [eva] using specification for function atanl
diff --git a/tests/value/initialized_copy.i b/tests/value/initialized_copy.i
index a99ab86cdc08c47d71d001e648ac8e24a7e09805..e61a670f209c4cf6c44b84de7c7a819536a3c74b 100644
--- a/tests/value/initialized_copy.i
+++ b/tests/value/initialized_copy.i
@@ -132,7 +132,7 @@ int main() {
 
   if (v) {
     int a;
-    g(a); // completely indeterminate. We also warn when the option is not active, as g has no body
+    g(a); // completely indeterminate.
     Frama_C_show_each_unreached();
   }
 
@@ -148,7 +148,7 @@ int main() {
     int a;
     if (v)
       a = 1;
-    g(a); // possibly determinate. We also warn when the option is not active, as g has no body
+    g(a); // possibly determinate.
     Frama_C_dump_each();
   }
 
diff --git a/tests/value/oracle/initialized_copy.1.res.oracle b/tests/value/oracle/initialized_copy.1.res.oracle
index 134e25adc51b4d290a7da7ee64f68d721d0e6eb6..962ffefd985da63b792ea0802ec031e52edf24eb 100644
--- a/tests/value/oracle/initialized_copy.1.res.oracle
+++ b/tests/value/oracle/initialized_copy.1.res.oracle
@@ -75,8 +75,13 @@
 [eva] Recording results for f
 [eva] Done for function f
 [eva] tests/value/initialized_copy.i:130: Frama_C_show_each_unreached:
-[eva:alarm] tests/value/initialized_copy.i:135: Warning: 
-  accessing uninitialized left-value. assert \initialized(&a_6);
+[eva] computing for function g <- main.
+  Called from tests/value/initialized_copy.i:135.
+[kernel:annot:missing-spec] tests/value/initialized_copy.i:135: Warning: 
+  Neither code nor specification for function g, generating default assigns from the prototype
+[eva] using specification for function g
+[eva] Done for function g
+[eva] tests/value/initialized_copy.i:136: Frama_C_show_each_unreached:
 [eva] computing for function f <- main.
   Called from tests/value/initialized_copy.i:143.
 [eva] Recording results for f
@@ -89,26 +94,19 @@
   a_7 ∈ {1} or UNINITIALIZED
   __retres ∈ UNINITIALIZED
   ==END OF DUMP==
-[eva:alarm] tests/value/initialized_copy.i:151: Warning: 
-  accessing uninitialized left-value. assert \initialized(&a_8);
 [eva] computing for function g <- main.
   Called from tests/value/initialized_copy.i:151.
-[kernel:annot:missing-spec] tests/value/initialized_copy.i:151: Warning: 
-  Neither code nor specification for function g, generating default assigns from the prototype
-[eva] using specification for function g
 [eva] Done for function g
 [eva] tests/value/initialized_copy.i:152: 
   Frama_C_dump_each:
   # cvalue:
   w[0..9] ∈ {0; 12} or UNINITIALIZED
   v ∈ [--..--]
-  a_8 ∈ {1}
+  a_8 ∈ {1} or UNINITIALIZED
   __retres ∈ UNINITIALIZED
   ==END OF DUMP==
 [eva] Recording results for main
 [eva] done for function main
-[eva] tests/value/initialized_copy.i:135: 
-  assertion 'Eva,initialization' got final status invalid.
 [eva] ====== VALUES COMPUTED ======
 [eva:final-states] Values at end of function f: