From cfe4beff89242aa20a6b44a131d32314c5995e31 Mon Sep 17 00:00:00 2001
From: Andre Maroneze <andre.maroneze@cea.fr>
Date: Wed, 3 Mar 2021 09:38:49 +0100
Subject: [PATCH] [Libc] fix and improve specification for frexp* and ldexp*

Due to the absence of a long double version of the pow() logic function,
and due to likely little demand for ldexpl, this function has not been
specified.
---
 share/libc/math.h                             | 125 ++-
 .../report/tests/report/oracle/csv.csv        |   2 +-
 tests/idct/oracle/ieee_1180_1990.res.oracle   | 234 +++--
 tests/libc/math_h.c                           |  50 +-
 tests/libc/oracle/fc_libc.0.res.oracle        |  35 +-
 tests/libc/oracle/fc_libc.1.res.oracle        | 110 ++-
 tests/libc/oracle/math_h.res.oracle           | 800 +++++++++++++++---
 7 files changed, 1063 insertions(+), 293 deletions(-)

diff --git a/share/libc/math.h b/share/libc/math.h
index 0a8d71de4ce..9aa74f2eb47 100644
--- a/share/libc/math.h
+++ b/share/libc/math.h
@@ -655,42 +655,129 @@ extern long double expm1l(long double x);
 
 /*@
   requires valid_exp: \valid(exp);
-  assigns \result, *exp \from value;
-  ensures initialization:exp:\initialized(exp);
- */
-extern double frexp(double value, int *exp);
+  assigns \result, *exp \from x;
+  behavior normal:
+    assumes finite_arg: \is_finite(x);
+    assumes arg_nonzero: x != 0.0;
+    ensures finite_result: \is_finite(\result);
+    ensures bounded_result: 0.5 <= \result < 1.0;
+    ensures initialization:exp: \initialized(exp);
+  behavior infinite:
+    assumes infinite_arg: \is_plus_infinity(x) || \is_minus_infinity(x);
+    ensures infinite_result: \is_infinite(\result);
+    ensures result_same_infinite: \result == x;
+  behavior zero:
+    assumes zero_arg: \is_finite(x) && x == 0.;
+    ensures finite_result: \is_finite(\result);
+    ensures zero_result: \result == 0.0;
+    ensures initialization:exp: \initialized(exp);
+    ensures zero_exp: *exp == 0;
+  behavior nan:
+    assumes nan_arg: \is_NaN(x);
+    ensures nan_result: \is_NaN(\result);
+  complete behaviors;
+  disjoint behaviors;
+*/
+extern double frexp(double x, int *exp);
 
 /*@
   requires valid_exp: \valid(exp);
-  assigns \result, *exp \from value;
-  ensures initialization:exp:\initialized(exp);
- */
-extern float frexpf(float value, int *exp);
+  assigns \result, *exp \from x;
+  behavior normal:
+    assumes finite_arg: \is_finite(x);
+    assumes arg_nonzero: x != 0.0;
+    ensures finite_result: \is_finite(\result);
+    ensures bounded_result: 0.5 <= \result < 1.0;
+    ensures initialization:exp: \initialized(exp);
+  behavior infinite:
+    assumes infinite_arg: \is_plus_infinity(x) || \is_minus_infinity(x);
+    ensures infinite_result: \is_infinite(\result);
+    ensures result_same_infinite: \result == x;
+  behavior zero:
+    assumes zero_arg: \is_finite(x) && x == 0.;
+    ensures finite_result: \is_finite(\result);
+    ensures zero_result: \result == x;
+    ensures initialization:exp: \initialized(exp);
+    ensures zero_exp: *exp == 0;
+  behavior nan:
+    assumes nan_arg: \is_NaN(x);
+    ensures nan_result: \is_NaN(\result);
+  complete behaviors;
+  disjoint behaviors;
+*/
+extern float frexpf(float x, int *exp);
 
 /*@
   requires valid_exp: \valid(exp);
-  assigns \result, *exp \from value;
-  ensures initialization:exp:\initialized(exp);
- */
-extern long double frexpl(long double value, int *exp);
+  assigns \result, *exp \from x;
+  behavior normal:
+    assumes finite_arg: \is_finite(x);
+    assumes arg_nonzero: x != 0.0;
+    ensures finite_result: \is_finite(\result);
+    ensures bounded_result: 0.5 <= \result < 1.0;
+    ensures initialization:exp: \initialized(exp);
+  behavior infinite:
+    assumes infinite_arg: \is_plus_infinity(x) || \is_minus_infinity(x);
+    ensures infinite_result: \is_infinite(\result);
+    ensures result_same_infinite: \result == x;
+  behavior zero:
+    assumes zero_arg: \is_finite(x) && x == 0.;
+    ensures finite_result: \is_finite(\result);
+    ensures zero_result: \result == x;
+    ensures initialization:exp: \initialized(exp);
+    ensures zero_exp: *exp == 0;
+  behavior nan:
+    assumes nan_arg: \is_NaN(x);
+    ensures nan_result: \is_NaN(\result);
+  complete behaviors;
+  disjoint behaviors;
+*/
+extern long double frexpl(long double x, int *exp);
 
 extern int ilogb(double x);
 extern int ilogbf(float x);
 extern int ilogbl(long double x);
 
 /*@
-  assigns \result \from x, exp;
- */
+  assigns errno, \result \from x, exp;
+  behavior normal:
+    assumes finite_logic_res: \is_finite((double)(x * pow(2.0d, (double)exp)));
+    ensures finite_result: \is_finite(\result);
+    ensures errno: errno == ERANGE || errno == \old(errno); //ERANGE if underflow
+  behavior overflow_not_nan:
+    assumes not_nan_arg: !\is_NaN(x);
+    assumes infinite_logic_res: !\is_finite((double)(x * pow(2.0d, (double)exp)));
+    ensures infinite_result: \is_infinite(\result);
+    ensures errno: errno == ERANGE || errno == \old(errno);
+  behavior nan:
+    assumes nan_arg: \is_NaN(x);
+    assigns \result \from x;
+    ensures nan_result: \is_NaN(\result);
+  complete behaviors;
+  disjoint behaviors;
+*/
 extern double ldexp(double x, int exp);
 
 /*@
-  assigns \result \from x, exp;
- */
+  assigns errno, \result \from x, exp;
+  behavior normal:
+    assumes finite_logic_res: \is_finite((float)(x * pow(2.0f, (float)exp)));
+    ensures finite_result: \is_finite(\result);
+    ensures errno: errno == ERANGE || errno == \old(errno); //ERANGE if underflow
+  behavior overflow_not_nan:
+    assumes not_nan_arg: !\is_NaN(x);
+    assumes infinite_logic_res: !\is_finite((float)(x * pow(2.0f, (float)exp)));
+    ensures infinite_result: \is_infinite(\result);
+    ensures errno: errno == ERANGE || errno == \old(errno);
+  behavior nan:
+    assumes nan_arg: \is_NaN(x);
+    assigns \result \from x;
+    ensures nan_result: \is_NaN(\result);
+  complete behaviors;
+  disjoint behaviors;
+*/
 extern float ldexpf(float x, int exp);
 
-/*@
-  assigns \result \from x, exp;
- */
 extern long double ldexpl(long double x, int exp);
 
 /*@
diff --git a/src/plugins/report/tests/report/oracle/csv.csv b/src/plugins/report/tests/report/oracle/csv.csv
index 1e9a8265515..3dbfbfd16cc 100644
--- a/src/plugins/report/tests/report/oracle/csv.csv
+++ b/src/plugins/report/tests/report/oracle/csv.csv
@@ -1,5 +1,5 @@
 directory	file	line	function	property kind	status	property
-FRAMAC_SHARE/libc	math.h	1060	pow	precondition	Unknown	finite_logic_res: \is_finite(pow(x, y))
+FRAMAC_SHARE/libc	math.h	1147	pow	precondition	Unknown	finite_logic_res: \is_finite(pow(x, y))
 tests/report	csv.c	11	main1	signed_overflow	Unknown	-2147483648 ≤ x * x
 tests/report	csv.c	11	main1	signed_overflow	Unknown	x * x ≤ 2147483647
 tests/report	csv.c	12	main1	index_bound	Unknown	0 ≤ x
diff --git a/tests/idct/oracle/ieee_1180_1990.res.oracle b/tests/idct/oracle/ieee_1180_1990.res.oracle
index 485554170a2..c03bc0130e5 100644
--- a/tests/idct/oracle/ieee_1180_1990.res.oracle
+++ b/tests/idct/oracle/ieee_1180_1990.res.oracle
@@ -2965,70 +2965,152 @@
 --- Properties of Function 'frexp'
 --------------------------------------------------------------------------------
 
-[ Extern  ] Post-condition 'initialization,exp'
+[ Extern  ] Post-condition for 'normal' 'finite_result'
+            ensures finite_result: \is_finite(\result)
+            Unverifiable but considered Valid.
+[ Extern  ] Post-condition for 'normal' 'bounded_result'
+            ensures bounded_result: 0.5 ≤ \result < 1.0
+            Unverifiable but considered Valid.
+[ Extern  ] Post-condition for 'normal' 'initialization,exp'
+            ensures initialization: exp: \initialized(\old(exp))
+            Unverifiable but considered Valid.
+[ Extern  ] Post-condition for 'zero' 'finite_result'
+            ensures finite_result: \is_finite(\result)
+            Unverifiable but considered Valid.
+[ Extern  ] Post-condition for 'zero' 'zero_result'
+            ensures zero_result: \result ≡ 0.0
+            Unverifiable but considered Valid.
+[ Extern  ] Post-condition for 'zero' 'initialization,exp'
             ensures initialization: exp: \initialized(\old(exp))
             Unverifiable but considered Valid.
+[ Extern  ] Post-condition for 'zero' 'zero_exp'
+            ensures zero_exp: *\old(exp) ≡ 0
+            Unverifiable but considered Valid.
 [ Extern  ] Assigns (file share/libc/math.h, line 658)
             assigns \result, *exp;
             Unverifiable but considered Valid.
 [ Extern  ] Froms (file share/libc/math.h, line 658)
-            assigns \result \from value;
+            assigns \result \from x;
             Unverifiable but considered Valid.
 [ Extern  ] Froms (file share/libc/math.h, line 658)
-            assigns *exp \from value;
+            assigns *exp \from x;
             Unverifiable but considered Valid.
 [  Valid  ] Default behavior
             default behavior
             by Frama-C kernel.
+[  Valid  ] Behavior 'normal'
+            behavior normal
+            by Frama-C kernel.
+[  Valid  ] Behavior 'zero'
+            behavior zero
+            by Frama-C kernel.
 
 --------------------------------------------------------------------------------
 --- Properties of Function 'frexpf'
 --------------------------------------------------------------------------------
 
-[ Extern  ] Post-condition 'initialization,exp'
+[ Extern  ] Post-condition for 'normal' 'finite_result'
+            ensures finite_result: \is_finite(\result)
+            Unverifiable but considered Valid.
+[ Extern  ] Post-condition for 'normal' 'bounded_result'
+            ensures bounded_result: 0.5 ≤ \result < 1.0
+            Unverifiable but considered Valid.
+[ Extern  ] Post-condition for 'normal' 'initialization,exp'
+            ensures initialization: exp: \initialized(\old(exp))
+            Unverifiable but considered Valid.
+[ Extern  ] Post-condition for 'zero' 'finite_result'
+            ensures finite_result: \is_finite(\result)
+            Unverifiable but considered Valid.
+[ Extern  ] Post-condition for 'zero' 'zero_result'
+            ensures zero_result: \result ≡ \old(x)
+            Unverifiable but considered Valid.
+[ Extern  ] Post-condition for 'zero' 'initialization,exp'
             ensures initialization: exp: \initialized(\old(exp))
             Unverifiable but considered Valid.
-[ Extern  ] Assigns (file share/libc/math.h, line 665)
+[ Extern  ] Post-condition for 'zero' 'zero_exp'
+            ensures zero_exp: *\old(exp) ≡ 0
+            Unverifiable but considered Valid.
+[ Extern  ] Assigns (file share/libc/math.h, line 685)
             assigns \result, *exp;
             Unverifiable but considered Valid.
-[ Extern  ] Froms (file share/libc/math.h, line 665)
-            assigns \result \from value;
+[ Extern  ] Froms (file share/libc/math.h, line 685)
+            assigns \result \from x;
             Unverifiable but considered Valid.
-[ Extern  ] Froms (file share/libc/math.h, line 665)
-            assigns *exp \from value;
+[ Extern  ] Froms (file share/libc/math.h, line 685)
+            assigns *exp \from x;
             Unverifiable but considered Valid.
 [  Valid  ] Default behavior
             default behavior
             by Frama-C kernel.
+[  Valid  ] Behavior 'normal'
+            behavior normal
+            by Frama-C kernel.
+[  Valid  ] Behavior 'zero'
+            behavior zero
+            by Frama-C kernel.
 
 --------------------------------------------------------------------------------
 --- Properties of Function 'frexpl'
 --------------------------------------------------------------------------------
 
-[ Extern  ] Post-condition 'initialization,exp'
+[ Extern  ] Post-condition for 'normal' 'finite_result'
+            ensures finite_result: \is_finite(\result)
+            Unverifiable but considered Valid.
+[ Extern  ] Post-condition for 'normal' 'bounded_result'
+            ensures bounded_result: 0.5 ≤ \result < 1.0
+            Unverifiable but considered Valid.
+[ Extern  ] Post-condition for 'normal' 'initialization,exp'
+            ensures initialization: exp: \initialized(\old(exp))
+            Unverifiable but considered Valid.
+[ Extern  ] Post-condition for 'zero' 'finite_result'
+            ensures finite_result: \is_finite(\result)
+            Unverifiable but considered Valid.
+[ Extern  ] Post-condition for 'zero' 'zero_result'
+            ensures zero_result: \result ≡ \old(x)
+            Unverifiable but considered Valid.
+[ Extern  ] Post-condition for 'zero' 'initialization,exp'
             ensures initialization: exp: \initialized(\old(exp))
             Unverifiable but considered Valid.
-[ Extern  ] Assigns (file share/libc/math.h, line 672)
+[ Extern  ] Post-condition for 'zero' 'zero_exp'
+            ensures zero_exp: *\old(exp) ≡ 0
+            Unverifiable but considered Valid.
+[ Extern  ] Assigns (file share/libc/math.h, line 712)
             assigns \result, *exp;
             Unverifiable but considered Valid.
-[ Extern  ] Froms (file share/libc/math.h, line 672)
-            assigns \result \from value;
+[ Extern  ] Froms (file share/libc/math.h, line 712)
+            assigns \result \from x;
             Unverifiable but considered Valid.
-[ Extern  ] Froms (file share/libc/math.h, line 672)
-            assigns *exp \from value;
+[ Extern  ] Froms (file share/libc/math.h, line 712)
+            assigns *exp \from x;
             Unverifiable but considered Valid.
 [  Valid  ] Default behavior
             default behavior
             by Frama-C kernel.
+[  Valid  ] Behavior 'normal'
+            behavior normal
+            by Frama-C kernel.
+[  Valid  ] Behavior 'zero'
+            behavior zero
+            by Frama-C kernel.
 
 --------------------------------------------------------------------------------
 --- Properties of Function 'ldexp'
 --------------------------------------------------------------------------------
 
-[ Extern  ] Assigns nothing
-            assigns \nothing;
+[ Extern  ] Post-condition 'finite_result'
+            ensures finite_result: \is_finite(\result)
+            Unverifiable but considered Valid.
+[ Extern  ] Post-condition '__fc_errno'
+            ensures
+            __fc_errno: __fc_errno ≡ 34 ∨ __fc_errno ≡ \old(__fc_errno)
+            Unverifiable but considered Valid.
+[ Extern  ] Assigns (file share/libc/math.h, line 742)
+            assigns __fc_errno, \result;
             Unverifiable but considered Valid.
-[ Extern  ] Froms (file share/libc/math.h, line 682)
+[ Extern  ] Froms (file share/libc/math.h, line 742)
+            assigns __fc_errno \from x, exp;
+            Unverifiable but considered Valid.
+[ Extern  ] Froms (file share/libc/math.h, line 742)
             assigns \result \from x, exp;
             Unverifiable but considered Valid.
 [  Valid  ] Default behavior
@@ -3039,24 +3121,20 @@
 --- Properties of Function 'ldexpf'
 --------------------------------------------------------------------------------
 
-[ Extern  ] Assigns nothing
-            assigns \nothing;
+[ Extern  ] Post-condition 'finite_result'
+            ensures finite_result: \is_finite(\result)
             Unverifiable but considered Valid.
-[ Extern  ] Froms (file share/libc/math.h, line 687)
-            assigns \result \from x, exp;
+[ Extern  ] Post-condition '__fc_errno'
+            ensures
+            __fc_errno: __fc_errno ≡ 34 ∨ __fc_errno ≡ \old(__fc_errno)
             Unverifiable but considered Valid.
-[  Valid  ] Default behavior
-            default behavior
-            by Frama-C kernel.
-
---------------------------------------------------------------------------------
---- Properties of Function 'ldexpl'
---------------------------------------------------------------------------------
-
-[ Extern  ] Assigns nothing
-            assigns \nothing;
+[ Extern  ] Assigns (file share/libc/math.h, line 762)
+            assigns __fc_errno, \result;
+            Unverifiable but considered Valid.
+[ Extern  ] Froms (file share/libc/math.h, line 762)
+            assigns __fc_errno \from x, exp;
             Unverifiable but considered Valid.
-[ Extern  ] Froms (file share/libc/math.h, line 692)
+[ Extern  ] Froms (file share/libc/math.h, line 762)
             assigns \result \from x, exp;
             Unverifiable but considered Valid.
 [  Valid  ] Default behavior
@@ -3076,7 +3154,7 @@
 [ Extern  ] Assigns nothing
             assigns \nothing;
             Unverifiable but considered Valid.
-[ Extern  ] Froms (file share/libc/math.h, line 701)
+[ Extern  ] Froms (file share/libc/math.h, line 788)
             assigns \result \from x;
             Unverifiable but considered Valid.
 [  Valid  ] Default behavior
@@ -3096,7 +3174,7 @@
 [ Extern  ] Assigns nothing
             assigns \nothing;
             Unverifiable but considered Valid.
-[ Extern  ] Froms (file share/libc/math.h, line 732)
+[ Extern  ] Froms (file share/libc/math.h, line 819)
             assigns \result \from x;
             Unverifiable but considered Valid.
 [  Valid  ] Default behavior
@@ -3116,7 +3194,7 @@
 [ Extern  ] Assigns nothing
             assigns \nothing;
             Unverifiable but considered Valid.
-[ Extern  ] Froms (file share/libc/math.h, line 763)
+[ Extern  ] Froms (file share/libc/math.h, line 850)
             assigns \result \from x;
             Unverifiable but considered Valid.
 [  Valid  ] Default behavior
@@ -3136,7 +3214,7 @@
 [ Extern  ] Assigns nothing
             assigns \nothing;
             Unverifiable but considered Valid.
-[ Extern  ] Froms (file share/libc/math.h, line 794)
+[ Extern  ] Froms (file share/libc/math.h, line 881)
             assigns \result \from x;
             Unverifiable but considered Valid.
 [  Valid  ] Default behavior
@@ -3156,7 +3234,7 @@
 [ Extern  ] Assigns nothing
             assigns \nothing;
             Unverifiable but considered Valid.
-[ Extern  ] Froms (file share/libc/math.h, line 825)
+[ Extern  ] Froms (file share/libc/math.h, line 912)
             assigns \result \from x;
             Unverifiable but considered Valid.
 [  Valid  ] Default behavior
@@ -3176,7 +3254,7 @@
 [ Extern  ] Assigns nothing
             assigns \nothing;
             Unverifiable but considered Valid.
-[ Extern  ] Froms (file share/libc/math.h, line 856)
+[ Extern  ] Froms (file share/libc/math.h, line 943)
             assigns \result \from x;
             Unverifiable but considered Valid.
 [  Valid  ] Default behavior
@@ -3196,7 +3274,7 @@
 [ Extern  ] Assigns nothing
             assigns \nothing;
             Unverifiable but considered Valid.
-[ Extern  ] Froms (file share/libc/math.h, line 891)
+[ Extern  ] Froms (file share/libc/math.h, line 978)
             assigns \result \from x;
             Unverifiable but considered Valid.
 [  Valid  ] Default behavior
@@ -3216,7 +3294,7 @@
 [ Extern  ] Assigns nothing
             assigns \nothing;
             Unverifiable but considered Valid.
-[ Extern  ] Froms (file share/libc/math.h, line 922)
+[ Extern  ] Froms (file share/libc/math.h, line 1009)
             assigns \result \from x;
             Unverifiable but considered Valid.
 [  Valid  ] Default behavior
@@ -3236,7 +3314,7 @@
 [ Extern  ] Assigns nothing
             assigns \nothing;
             Unverifiable but considered Valid.
-[ Extern  ] Froms (file share/libc/math.h, line 953)
+[ Extern  ] Froms (file share/libc/math.h, line 1040)
             assigns \result \from x;
             Unverifiable but considered Valid.
 [  Valid  ] Default behavior
@@ -3261,7 +3339,7 @@
 [ Extern  ] Assigns nothing
             assigns \nothing;
             Unverifiable but considered Valid.
-[ Extern  ] Froms (file share/libc/math.h, line 1000)
+[ Extern  ] Froms (file share/libc/math.h, line 1087)
             assigns \result \from x;
             Unverifiable but considered Valid.
 [  Valid  ] Default behavior
@@ -3286,7 +3364,7 @@
 [ Extern  ] Assigns nothing
             assigns \nothing;
             Unverifiable but considered Valid.
-[ Extern  ] Froms (file share/libc/math.h, line 1018)
+[ Extern  ] Froms (file share/libc/math.h, line 1105)
             assigns \result \from x;
             Unverifiable but considered Valid.
 [  Valid  ] Default behavior
@@ -3311,7 +3389,7 @@
 [ Extern  ] Assigns nothing
             assigns \nothing;
             Unverifiable but considered Valid.
-[ Extern  ] Froms (file share/libc/math.h, line 1036)
+[ Extern  ] Froms (file share/libc/math.h, line 1123)
             assigns \result \from x;
             Unverifiable but considered Valid.
 [  Valid  ] Default behavior
@@ -3329,13 +3407,13 @@
             ensures
             __fc_errno: __fc_errno ≡ 34 ∨ __fc_errno ≡ \old(__fc_errno)
             Unverifiable but considered Valid.
-[ Extern  ] Assigns (file share/libc/math.h, line 1058)
+[ Extern  ] Assigns (file share/libc/math.h, line 1145)
             assigns __fc_errno, \result;
             Unverifiable but considered Valid.
-[ Extern  ] Froms (file share/libc/math.h, line 1058)
+[ Extern  ] Froms (file share/libc/math.h, line 1145)
             assigns __fc_errno \from x, y;
             Unverifiable but considered Valid.
-[ Extern  ] Froms (file share/libc/math.h, line 1058)
+[ Extern  ] Froms (file share/libc/math.h, line 1145)
             assigns \result \from x, y;
             Unverifiable but considered Valid.
 [  Valid  ] Default behavior
@@ -3353,13 +3431,13 @@
             ensures
             __fc_errno: __fc_errno ≡ 34 ∨ __fc_errno ≡ \old(__fc_errno)
             Unverifiable but considered Valid.
-[ Extern  ] Assigns (file share/libc/math.h, line 1073)
+[ Extern  ] Assigns (file share/libc/math.h, line 1160)
             assigns __fc_errno, \result;
             Unverifiable but considered Valid.
-[ Extern  ] Froms (file share/libc/math.h, line 1073)
+[ Extern  ] Froms (file share/libc/math.h, line 1160)
             assigns __fc_errno \from x, y;
             Unverifiable but considered Valid.
-[ Extern  ] Froms (file share/libc/math.h, line 1073)
+[ Extern  ] Froms (file share/libc/math.h, line 1160)
             assigns \result \from x, y;
             Unverifiable but considered Valid.
 [  Valid  ] Default behavior
@@ -3391,7 +3469,7 @@
 [ Extern  ] Assigns nothing
             assigns \nothing;
             Unverifiable but considered Valid.
-[ Extern  ] Froms (file share/libc/math.h, line 1094)
+[ Extern  ] Froms (file share/libc/math.h, line 1181)
             assigns \result \from x;
             Unverifiable but considered Valid.
 [  Valid  ] Default behavior
@@ -3417,7 +3495,7 @@
 [ Extern  ] Assigns nothing
             assigns \nothing;
             Unverifiable but considered Valid.
-[ Extern  ] Froms (file share/libc/math.h, line 1123)
+[ Extern  ] Froms (file share/libc/math.h, line 1210)
             assigns \result \from x;
             Unverifiable but considered Valid.
 [  Valid  ] Default behavior
@@ -3440,7 +3518,7 @@
 [ Extern  ] Assigns nothing
             assigns \nothing;
             Unverifiable but considered Valid.
-[ Extern  ] Froms (file share/libc/math.h, line 1152)
+[ Extern  ] Froms (file share/libc/math.h, line 1239)
             assigns \result \from x;
             Unverifiable but considered Valid.
 [  Valid  ] Default behavior
@@ -3457,7 +3535,7 @@
 [ Extern  ] Assigns nothing
             assigns \nothing;
             Unverifiable but considered Valid.
-[ Extern  ] Froms (file share/libc/math.h, line 1192)
+[ Extern  ] Froms (file share/libc/math.h, line 1279)
             assigns \result \from x;
             Unverifiable but considered Valid.
 [  Valid  ] Default behavior
@@ -3474,7 +3552,7 @@
 [ Extern  ] Assigns nothing
             assigns \nothing;
             Unverifiable but considered Valid.
-[ Extern  ] Froms (file share/libc/math.h, line 1209)
+[ Extern  ] Froms (file share/libc/math.h, line 1296)
             assigns \result \from x;
             Unverifiable but considered Valid.
 [  Valid  ] Default behavior
@@ -3491,7 +3569,7 @@
 [ Extern  ] Assigns nothing
             assigns \nothing;
             Unverifiable but considered Valid.
-[ Extern  ] Froms (file share/libc/math.h, line 1226)
+[ Extern  ] Froms (file share/libc/math.h, line 1313)
             assigns \result \from x;
             Unverifiable but considered Valid.
 [  Valid  ] Default behavior
@@ -3508,7 +3586,7 @@
 [ Extern  ] Assigns nothing
             assigns \nothing;
             Unverifiable but considered Valid.
-[ Extern  ] Froms (file share/libc/math.h, line 1243)
+[ Extern  ] Froms (file share/libc/math.h, line 1330)
             assigns \result \from x;
             Unverifiable but considered Valid.
 [  Valid  ] Default behavior
@@ -3525,7 +3603,7 @@
 [ Extern  ] Assigns nothing
             assigns \nothing;
             Unverifiable but considered Valid.
-[ Extern  ] Froms (file share/libc/math.h, line 1260)
+[ Extern  ] Froms (file share/libc/math.h, line 1347)
             assigns \result \from x;
             Unverifiable but considered Valid.
 [  Valid  ] Default behavior
@@ -3542,7 +3620,7 @@
 [ Extern  ] Assigns nothing
             assigns \nothing;
             Unverifiable but considered Valid.
-[ Extern  ] Froms (file share/libc/math.h, line 1277)
+[ Extern  ] Froms (file share/libc/math.h, line 1364)
             assigns \result \from x;
             Unverifiable but considered Valid.
 [  Valid  ] Default behavior
@@ -3559,7 +3637,7 @@
 [ Extern  ] Assigns nothing
             assigns \nothing;
             Unverifiable but considered Valid.
-[ Extern  ] Froms (file share/libc/math.h, line 1310)
+[ Extern  ] Froms (file share/libc/math.h, line 1397)
             assigns \result \from x;
             Unverifiable but considered Valid.
 [  Valid  ] Default behavior
@@ -3576,7 +3654,7 @@
 [ Extern  ] Assigns nothing
             assigns \nothing;
             Unverifiable but considered Valid.
-[ Extern  ] Froms (file share/libc/math.h, line 1327)
+[ Extern  ] Froms (file share/libc/math.h, line 1414)
             assigns \result \from x;
             Unverifiable but considered Valid.
 [  Valid  ] Default behavior
@@ -3593,7 +3671,7 @@
 [ Extern  ] Assigns nothing
             assigns \nothing;
             Unverifiable but considered Valid.
-[ Extern  ] Froms (file share/libc/math.h, line 1344)
+[ Extern  ] Froms (file share/libc/math.h, line 1431)
             assigns \result \from x;
             Unverifiable but considered Valid.
 [  Valid  ] Default behavior
@@ -3610,7 +3688,7 @@
 [ Extern  ] Assigns nothing
             assigns \nothing;
             Unverifiable but considered Valid.
-[ Extern  ] Froms (file share/libc/math.h, line 1369)
+[ Extern  ] Froms (file share/libc/math.h, line 1456)
             assigns \result \from x;
             Unverifiable but considered Valid.
 [  Valid  ] Default behavior
@@ -3627,7 +3705,7 @@
 [ Extern  ] Assigns nothing
             assigns \nothing;
             Unverifiable but considered Valid.
-[ Extern  ] Froms (file share/libc/math.h, line 1386)
+[ Extern  ] Froms (file share/libc/math.h, line 1473)
             assigns \result \from x;
             Unverifiable but considered Valid.
 [  Valid  ] Default behavior
@@ -3644,7 +3722,7 @@
 [ Extern  ] Assigns nothing
             assigns \nothing;
             Unverifiable but considered Valid.
-[ Extern  ] Froms (file share/libc/math.h, line 1403)
+[ Extern  ] Froms (file share/libc/math.h, line 1490)
             assigns \result \from x;
             Unverifiable but considered Valid.
 [  Valid  ] Default behavior
@@ -3664,7 +3742,7 @@
 [ Extern  ] Assigns nothing
             assigns \nothing;
             Unverifiable but considered Valid.
-[ Extern  ] Froms (file share/libc/math.h, line 1423)
+[ Extern  ] Froms (file share/libc/math.h, line 1510)
             assigns \result \from x, y;
             Unverifiable but considered Valid.
 [  Valid  ] Default behavior
@@ -3684,7 +3762,7 @@
 [ Extern  ] Assigns nothing
             assigns \nothing;
             Unverifiable but considered Valid.
-[ Extern  ] Froms (file share/libc/math.h, line 1444)
+[ Extern  ] Froms (file share/libc/math.h, line 1531)
             assigns \result \from x, y;
             Unverifiable but considered Valid.
 [  Valid  ] Default behavior
@@ -3701,7 +3779,7 @@
 [ Extern  ] Assigns nothing
             assigns \nothing;
             Unverifiable but considered Valid.
-[ Extern  ] Froms (file share/libc/math.h, line 1477)
+[ Extern  ] Froms (file share/libc/math.h, line 1564)
             assigns \result \from (indirect: *(tagp + (0 ..)));
             Unverifiable but considered Valid.
 [  Valid  ] Default behavior
@@ -3718,7 +3796,7 @@
 [ Extern  ] Assigns nothing
             assigns \nothing;
             Unverifiable but considered Valid.
-[ Extern  ] Froms (file share/libc/math.h, line 1484)
+[ Extern  ] Froms (file share/libc/math.h, line 1571)
             assigns \result \from (indirect: *(tagp + (0 ..)));
             Unverifiable but considered Valid.
 [  Valid  ] Default behavior
@@ -3735,7 +3813,7 @@
 [ Extern  ] Assigns nothing
             assigns \nothing;
             Unverifiable but considered Valid.
-[ Extern  ] Froms (file share/libc/math.h, line 1491)
+[ Extern  ] Froms (file share/libc/math.h, line 1578)
             assigns \result \from (indirect: *(tagp + (0 ..)));
             Unverifiable but considered Valid.
 [  Valid  ] Default behavior
@@ -3755,7 +3833,7 @@
 [ Extern  ] Assigns nothing
             assigns \nothing;
             Unverifiable but considered Valid.
-[ Extern  ] Froms (file share/libc/math.h, line 1521)
+[ Extern  ] Froms (file share/libc/math.h, line 1608)
             assigns \result \from f;
             Unverifiable but considered Valid.
 [  Valid  ] Default behavior
@@ -3781,7 +3859,7 @@
 [ Extern  ] Assigns nothing
             assigns \nothing;
             Unverifiable but considered Valid.
-[ Extern  ] Froms (file share/libc/math.h, line 1534)
+[ Extern  ] Froms (file share/libc/math.h, line 1621)
             assigns \result \from d;
             Unverifiable but considered Valid.
 [  Valid  ] Default behavior
@@ -3804,7 +3882,7 @@
 [ Extern  ] Assigns nothing
             assigns \nothing;
             Unverifiable but considered Valid.
-[ Extern  ] Froms (file share/libc/math.h, line 1561)
+[ Extern  ] Froms (file share/libc/math.h, line 1648)
             assigns \result \from \nothing;
             Unverifiable but considered Valid.
 [  Valid  ] Default behavior
@@ -3821,7 +3899,7 @@
 [ Extern  ] Assigns nothing
             assigns \nothing;
             Unverifiable but considered Valid.
-[ Extern  ] Froms (file share/libc/math.h, line 1567)
+[ Extern  ] Froms (file share/libc/math.h, line 1654)
             assigns \result \from \nothing;
             Unverifiable but considered Valid.
 [  Valid  ] Default behavior
@@ -4183,9 +4261,9 @@
 --------------------------------------------------------------------------------
 --- Status Report Summary
 --------------------------------------------------------------------------------
-   179 Completely validated
+   184 Completely validated
     16 Locally validated
-   506 Considered valid
+   528 Considered valid
     56 To be validated
-   757 Total
+   784 Total
 --------------------------------------------------------------------------------
diff --git a/tests/libc/math_h.c b/tests/libc/math_h.c
index fce13dd4be3..1c8cc1b985d 100644
--- a/tests/libc/math_h.c
+++ b/tests/libc/math_h.c
@@ -24,8 +24,8 @@ const double large = 1e38;
 const double huge_val = HUGE_VAL;
 const float huge_valf = HUGE_VALF;
 const long double huge_vall = HUGE_VALL;
-#endif
 const float infinity = INFINITY;
+#endif
 const double fp_ilogb0 = FP_ILOGB0;
 const double fp_ilogbnan = FP_ILOGBNAN;
 volatile int int_top;
@@ -42,7 +42,21 @@ volatile int int_top;
   TEST_VAL_CONST(type,f,large);                 \
   TEST_VAL_CONST(type,f,prefix##top)
 
-void test_simple_specs(void);
+// tests functions with 2 arguments, where the first one changes,
+// but the second one is fixed by the caller.
+// suffix prevents redeclaring variables with the same name
+#define TEST_VAL2_FST_CONST(type,f,cst,snd_arg,suffix) type f##_##cst##suffix = f(cst,snd_arg)
+#define TEST_FUN2_FST_CONSTS(type,f,prefix,snd_arg,suffix)    \
+  TEST_VAL2_FST_CONST(type,f,prefix##pi,snd_arg,suffix);            \
+  TEST_VAL2_FST_CONST(type,f,prefix##half_pi,snd_arg,suffix);  \
+  TEST_VAL2_FST_CONST(type,f,prefix##e,snd_arg,suffix);        \
+  TEST_VAL2_FST_CONST(type,f,zero,snd_arg,suffix);             \
+  TEST_VAL2_FST_CONST(type,f,minus_zero,snd_arg,suffix);       \
+  TEST_VAL2_FST_CONST(type,f,one,snd_arg,suffix);              \
+  TEST_VAL2_FST_CONST(type,f,minus_one,snd_arg,suffix);        \
+  TEST_VAL2_FST_CONST(type,f,large,snd_arg,suffix);            \
+  TEST_VAL2_FST_CONST(type,f,prefix##top,snd_arg,suffix)
+
 int main() {
   TEST_FUN_CONSTS(double,atan,);
   TEST_FUN_CONSTS(float,atanf,f_);
@@ -50,6 +64,22 @@ int main() {
   TEST_FUN_CONSTS(double,fabs,);
   TEST_FUN_CONSTS(float,fabsf,f_);
   TEST_FUN_CONSTS(long double,fabsl,ld_);
+  int exponent;
+  TEST_FUN2_FST_CONSTS(double,frexp,,&exponent,);
+  TEST_FUN2_FST_CONSTS(float,frexpf,f_,&exponent,);
+  TEST_FUN2_FST_CONSTS(long double,frexpl,ld_,&exponent,);
+  TEST_FUN2_FST_CONSTS(double,ldexp,,10,);
+  TEST_FUN2_FST_CONSTS(float,ldexpf,f_,10,);
+  //TEST_FUN2_FST_CONSTS(long double,ldexpl,ld_,10,);
+  TEST_FUN2_FST_CONSTS(double,ldexp,,0,_zero);
+  TEST_FUN2_FST_CONSTS(float,ldexpf,f_,0,_zero);
+  //TEST_FUN2_FST_CONSTS(long double,ldexpl,ld_,0,_zero);
+  TEST_FUN2_FST_CONSTS(double,ldexp,,-5,_minus5);
+  TEST_FUN2_FST_CONSTS(float,ldexpf,f_,-5,_minus5);
+  //TEST_FUN2_FST_CONSTS(long double,ldexpl,ld_,-5,_minus5);
+  TEST_FUN2_FST_CONSTS(double,ldexp,,100000,_huge);
+  TEST_FUN2_FST_CONSTS(float,ldexpf,f_,100000,_huge);
+  //TEST_FUN2_FST_CONSTS(long double,ldexpl,ld_,100000,_huge);
 
 #ifdef NONFINITE
   int r;
@@ -66,20 +96,4 @@ int main() {
   r = isfinite(NAN);
   //@ assert !r;
 #endif
-
-  test_simple_specs();
-}
-
-#define TEST_VAL_VAR(type,fn,...) type res_##fn = fn(__VA_ARGS__)
-
-#define TEST_FUN_VAR(fn,...)                    \
-  TEST_VAL_VAR(double,fn,__VA_ARGS__);          \
-  TEST_VAL_VAR(float,fn##f,__VA_ARGS__);        \
-  TEST_VAL_VAR(long double,fn##l,__VA_ARGS__);
-
-void test_simple_specs() {
-  int exponent;
-  TEST_FUN_VAR(frexp, ld_top, &exponent);
-  TEST_FUN_VAR(ldexp, ld_top, int_top);
-  //@ assert \initialized(&exponent);
 }
diff --git a/tests/libc/oracle/fc_libc.0.res.oracle b/tests/libc/oracle/fc_libc.0.res.oracle
index 85f41d33f45..483efb112ac 100644
--- a/tests/libc/oracle/fc_libc.0.res.oracle
+++ b/tests/libc/oracle/fc_libc.0.res.oracle
@@ -41,7 +41,7 @@
    wcscpy (0 call); wcsdup (0 call); wcslen (3 calls); wcsncat (0 call);
    wcsncpy (0 call); wmemcpy (1 call); wmemset (0 call); 
   
-  Specified-only functions (422)
+  Specified-only functions (421)
   ==============================
    FD_CLR (0 call); FD_ISSET (0 call); FD_SET (0 call); FD_ZERO (0 call);
    Frama_C_int_interval (0 call); Frama_C_long_interval (0 call);
@@ -112,22 +112,21 @@
    iconv_open (0 call); inet_addr (2 calls); inet_ntoa (0 call);
    inet_ntop (0 call); inet_pton (0 call); isascii (0 call); isatty (0 call);
    jrand48 (0 call); kill (0 call); killpg (0 call); labs (0 call);
-   lcong48 (0 call); ldexp (0 call); ldexpf (0 call); ldexpl (0 call);
-   ldiv (0 call); listen (0 call); llabs (0 call); lldiv (0 call);
-   localtime (0 call); log (0 call); log10 (0 call); log10f (0 call);
-   log10l (0 call); log2 (0 call); log2f (0 call); log2l (0 call);
-   logf (0 call); logl (0 call); longjmp (0 call); lrand48 (0 call);
-   lseek (0 call); lstat (0 call); makedev (0 call); malloc (10 calls);
-   mblen (0 call); mbstowcs (0 call); mbtowc (0 call); mkdir (0 call);
-   mkfifo (0 call); mknod (0 call); mkstemp (0 call); mktime (0 call);
-   mrand48 (0 call); nan (0 call); nanf (0 call); nanl (0 call);
-   nanosleep (0 call); nrand48 (0 call); ntohl (0 call); ntohs (0 call);
-   open (0 call); openat (0 call); opendir (0 call); openlog (0 call);
-   pathconf (0 call); pclose (0 call); perror (0 call); pipe (0 call);
-   poll (0 call); popen (0 call); pow (0 call); powf (0 call);
-   pthread_cond_broadcast (0 call); pthread_cond_destroy (0 call);
-   pthread_cond_init (0 call); pthread_cond_wait (0 call);
-   pthread_create (0 call); pthread_join (0 call);
+   lcong48 (0 call); ldexp (0 call); ldexpf (0 call); ldiv (0 call);
+   listen (0 call); llabs (0 call); lldiv (0 call); localtime (0 call);
+   log (0 call); log10 (0 call); log10f (0 call); log10l (0 call);
+   log2 (0 call); log2f (0 call); log2l (0 call); logf (0 call); logl (0 call);
+   longjmp (0 call); lrand48 (0 call); lseek (0 call); lstat (0 call);
+   makedev (0 call); malloc (10 calls); mblen (0 call); mbstowcs (0 call);
+   mbtowc (0 call); mkdir (0 call); mkfifo (0 call); mknod (0 call);
+   mkstemp (0 call); mktime (0 call); mrand48 (0 call); nan (0 call);
+   nanf (0 call); nanl (0 call); nanosleep (0 call); nrand48 (0 call);
+   ntohl (0 call); ntohs (0 call); open (0 call); openat (0 call);
+   opendir (0 call); openlog (0 call); pathconf (0 call); pclose (0 call);
+   perror (0 call); pipe (0 call); poll (0 call); popen (0 call); pow (0 call);
+   powf (0 call); pthread_cond_broadcast (0 call);
+   pthread_cond_destroy (0 call); pthread_cond_init (0 call);
+   pthread_cond_wait (0 call); pthread_create (0 call); pthread_join (0 call);
    pthread_mutex_destroy (0 call); pthread_mutex_init (0 call);
    pthread_mutex_lock (0 call); pthread_mutex_unlock (0 call);
    pthread_mutexattr_destroy (0 call); pthread_mutexattr_init (0 call);
@@ -196,7 +195,7 @@
   Goto = 99
   Assignment = 466
   Exit point = 84
-  Function = 507
+  Function = 506
   Function call = 98
   Pointer dereferencing = 161
   Cyclomatic complexity = 299
diff --git a/tests/libc/oracle/fc_libc.1.res.oracle b/tests/libc/oracle/fc_libc.1.res.oracle
index 3e8d34f0021..cc1ba0226d8 100644
--- a/tests/libc/oracle/fc_libc.1.res.oracle
+++ b/tests/libc/oracle/fc_libc.1.res.oracle
@@ -3082,41 +3082,111 @@ extern double exp(double x);
 extern float expf(float x);
 
 /*@ requires valid_exp: \valid(exp);
-    ensures initialization: exp: \initialized(\old(exp));
+    requires
+      ¬(infinite_arg: \is_plus_infinity(x) ∨ \is_minus_infinity(x));
+    requires ¬(nan_arg: \is_NaN(x));
     assigns \result, *exp;
-    assigns \result \from value;
-    assigns *exp \from value;
+    assigns \result \from x;
+    assigns *exp \from x;
+    
+    behavior normal:
+      assumes finite_arg: \is_finite(x);
+      assumes arg_nonzero: x ≢ 0.0;
+      ensures finite_result: \is_finite(\result);
+      ensures bounded_result: 0.5 ≤ \result < 1.0;
+      ensures initialization: exp: \initialized(\old(exp));
+    
+    behavior zero:
+      assumes zero_arg: \is_finite(x) ∧ x ≡ 0.;
+      ensures finite_result: \is_finite(\result);
+      ensures zero_result: \result ≡ 0.0;
+      ensures initialization: exp: \initialized(\old(exp));
+      ensures zero_exp: *\old(exp) ≡ 0;
+    
+    complete behaviors zero, normal;
+    disjoint behaviors zero, normal;
  */
-extern double frexp(double value, int *exp);
+extern double frexp(double x, int *exp);
 
 /*@ requires valid_exp: \valid(exp);
-    ensures initialization: exp: \initialized(\old(exp));
+    requires
+      ¬(infinite_arg: \is_plus_infinity(x) ∨ \is_minus_infinity(x));
+    requires ¬(nan_arg: \is_NaN(x));
     assigns \result, *exp;
-    assigns \result \from value;
-    assigns *exp \from value;
+    assigns \result \from x;
+    assigns *exp \from x;
+    
+    behavior normal:
+      assumes finite_arg: \is_finite(x);
+      assumes arg_nonzero: x ≢ 0.0;
+      ensures finite_result: \is_finite(\result);
+      ensures bounded_result: 0.5 ≤ \result < 1.0;
+      ensures initialization: exp: \initialized(\old(exp));
+    
+    behavior zero:
+      assumes zero_arg: \is_finite(x) ∧ x ≡ 0.;
+      ensures finite_result: \is_finite(\result);
+      ensures zero_result: \result ≡ \old(x);
+      ensures initialization: exp: \initialized(\old(exp));
+      ensures zero_exp: *\old(exp) ≡ 0;
+    
+    complete behaviors zero, normal;
+    disjoint behaviors zero, normal;
  */
-extern float frexpf(float value, int *exp);
+extern float frexpf(float x, int *exp);
 
 /*@ requires valid_exp: \valid(exp);
-    ensures initialization: exp: \initialized(\old(exp));
+    requires
+      ¬(infinite_arg: \is_plus_infinity(x) ∨ \is_minus_infinity(x));
+    requires ¬(nan_arg: \is_NaN(x));
     assigns \result, *exp;
-    assigns \result \from value;
-    assigns *exp \from value;
+    assigns \result \from x;
+    assigns *exp \from x;
+    
+    behavior normal:
+      assumes finite_arg: \is_finite(x);
+      assumes arg_nonzero: x ≢ 0.0;
+      ensures finite_result: \is_finite(\result);
+      ensures bounded_result: 0.5 ≤ \result < 1.0;
+      ensures initialization: exp: \initialized(\old(exp));
+    
+    behavior zero:
+      assumes zero_arg: \is_finite(x) ∧ x ≡ 0.;
+      ensures finite_result: \is_finite(\result);
+      ensures zero_result: \result ≡ \old(x);
+      ensures initialization: exp: \initialized(\old(exp));
+      ensures zero_exp: *\old(exp) ≡ 0;
+    
+    complete behaviors zero, normal;
+    disjoint behaviors zero, normal;
  */
-extern long double frexpl(long double value, int *exp);
+extern long double frexpl(long double x, int *exp);
 
-/*@ assigns \result;
-    assigns \result \from x, exp; */
+/*@ requires
+      finite_logic_res:
+        \is_finite((double)(x * pow((double)2.0d, (double)exp)));
+    ensures finite_result: \is_finite(\result);
+    ensures
+      __fc_errno: __fc_errno ≡ 34 ∨ __fc_errno ≡ \old(__fc_errno);
+    assigns __fc_errno, \result;
+    assigns __fc_errno \from x, exp;
+    assigns \result \from x, exp;
+ */
 extern double ldexp(double x, int exp);
 
-/*@ assigns \result;
-    assigns \result \from x, exp; */
+/*@ requires
+      finite_logic_res:
+        \is_finite((float)(x *
+                           pow((double)((float)2.0f), (double)((float)exp))));
+    ensures finite_result: \is_finite(\result);
+    ensures
+      __fc_errno: __fc_errno ≡ 34 ∨ __fc_errno ≡ \old(__fc_errno);
+    assigns __fc_errno, \result;
+    assigns __fc_errno \from x, exp;
+    assigns \result \from x, exp;
+ */
 extern float ldexpf(float x, int exp);
 
-/*@ assigns \result;
-    assigns \result \from x, exp; */
-extern long double ldexpl(long double x, int exp);
-
 /*@ requires finite_arg: \is_finite(x);
     requires arg_positive: x > 0;
     ensures finite_result: \is_finite(\result);
diff --git a/tests/libc/oracle/math_h.res.oracle b/tests/libc/oracle/math_h.res.oracle
index 0ad6df6695d..098f41b2d50 100644
--- a/tests/libc/oracle/math_h.res.oracle
+++ b/tests/libc/oracle/math_h.res.oracle
@@ -30,299 +30,721 @@
   fp_ilogb0 ∈ {-2147483648.}
   fp_ilogbnan ∈ {-2147483648.}
   int_top ∈ [--..--]
-[eva] tests/libc/math_h.c:47: Call to builtin atan
-[eva] tests/libc/math_h.c:47: Call to builtin atan
-[eva] tests/libc/math_h.c:47: Call to builtin atan
-[eva] tests/libc/math_h.c:47: Call to builtin atan
-[eva] tests/libc/math_h.c:47: Call to builtin atan
-[eva] tests/libc/math_h.c:47: Call to builtin atan
-[eva] tests/libc/math_h.c:47: Call to builtin atan
-[eva] tests/libc/math_h.c:47: Call to builtin atan
-[eva] tests/libc/math_h.c:47: Call to builtin atan
-[eva] tests/libc/math_h.c:48: Call to builtin atanf
-[eva] tests/libc/math_h.c:48: Call to builtin atanf
-[eva] tests/libc/math_h.c:48: Call to builtin atanf
-[eva] tests/libc/math_h.c:48: Call to builtin atanf
-[eva] tests/libc/math_h.c:48: Call to builtin atanf
-[eva] tests/libc/math_h.c:48: Call to builtin atanf
-[eva] tests/libc/math_h.c:48: Call to builtin atanf
-[eva] tests/libc/math_h.c:48: Call to builtin atanf
-[eva] tests/libc/math_h.c:48: Call to builtin atanf
+[eva] tests/libc/math_h.c:61: Call to builtin atan
+[eva] tests/libc/math_h.c:61: Call to builtin atan
+[eva] tests/libc/math_h.c:61: Call to builtin atan
+[eva] tests/libc/math_h.c:61: Call to builtin atan
+[eva] tests/libc/math_h.c:61: Call to builtin atan
+[eva] tests/libc/math_h.c:61: Call to builtin atan
+[eva] tests/libc/math_h.c:61: Call to builtin atan
+[eva] tests/libc/math_h.c:61: Call to builtin atan
+[eva] tests/libc/math_h.c:61: Call to builtin atan
+[eva] tests/libc/math_h.c:62: Call to builtin atanf
+[eva] tests/libc/math_h.c:62: Call to builtin atanf
+[eva] tests/libc/math_h.c:62: Call to builtin atanf
+[eva] tests/libc/math_h.c:62: Call to builtin atanf
+[eva] tests/libc/math_h.c:62: Call to builtin atanf
+[eva] tests/libc/math_h.c:62: Call to builtin atanf
+[eva] tests/libc/math_h.c:62: Call to builtin atanf
+[eva] tests/libc/math_h.c:62: Call to builtin atanf
+[eva] tests/libc/math_h.c:62: Call to builtin atanf
 [eva] computing for function atanl <- main.
-  Called from tests/libc/math_h.c:49.
+  Called from tests/libc/math_h.c:63.
 [eva] using specification for function atanl
 [eva] Done for function atanl
 [eva] computing for function atanl <- main.
-  Called from tests/libc/math_h.c:49.
+  Called from tests/libc/math_h.c:63.
 [eva] Done for function atanl
 [eva] computing for function atanl <- main.
-  Called from tests/libc/math_h.c:49.
+  Called from tests/libc/math_h.c:63.
 [eva] Done for function atanl
 [eva] computing for function atanl <- main.
-  Called from tests/libc/math_h.c:49.
+  Called from tests/libc/math_h.c:63.
 [eva] Done for function atanl
 [eva] computing for function atanl <- main.
-  Called from tests/libc/math_h.c:49.
+  Called from tests/libc/math_h.c:63.
 [eva] Done for function atanl
 [eva] computing for function atanl <- main.
-  Called from tests/libc/math_h.c:49.
+  Called from tests/libc/math_h.c:63.
 [eva] Done for function atanl
 [eva] computing for function atanl <- main.
-  Called from tests/libc/math_h.c:49.
+  Called from tests/libc/math_h.c:63.
 [eva] Done for function atanl
 [eva] computing for function atanl <- main.
-  Called from tests/libc/math_h.c:49.
+  Called from tests/libc/math_h.c:63.
 [eva] Done for function atanl
 [eva] computing for function atanl <- main.
-  Called from tests/libc/math_h.c:49.
+  Called from tests/libc/math_h.c:63.
 [eva] Done for function atanl
 [eva] computing for function fabs <- main.
-  Called from tests/libc/math_h.c:50.
+  Called from tests/libc/math_h.c:64.
 [eva] using specification for function fabs
 [eva] Done for function fabs
 [eva] computing for function fabs <- main.
-  Called from tests/libc/math_h.c:50.
+  Called from tests/libc/math_h.c:64.
 [eva] Done for function fabs
 [eva] computing for function fabs <- main.
-  Called from tests/libc/math_h.c:50.
+  Called from tests/libc/math_h.c:64.
 [eva] Done for function fabs
 [eva] computing for function fabs <- main.
-  Called from tests/libc/math_h.c:50.
+  Called from tests/libc/math_h.c:64.
 [eva] Done for function fabs
 [eva] computing for function fabs <- main.
-  Called from tests/libc/math_h.c:50.
+  Called from tests/libc/math_h.c:64.
 [eva] Done for function fabs
 [eva] computing for function fabs <- main.
-  Called from tests/libc/math_h.c:50.
+  Called from tests/libc/math_h.c:64.
 [eva] Done for function fabs
 [eva] computing for function fabs <- main.
-  Called from tests/libc/math_h.c:50.
+  Called from tests/libc/math_h.c:64.
 [eva] Done for function fabs
 [eva] computing for function fabs <- main.
-  Called from tests/libc/math_h.c:50.
+  Called from tests/libc/math_h.c:64.
 [eva] Done for function fabs
 [eva] computing for function fabs <- main.
-  Called from tests/libc/math_h.c:50.
+  Called from tests/libc/math_h.c:64.
 [eva] Done for function fabs
 [eva] computing for function fabs <- main.
-  Called from tests/libc/math_h.c:50.
+  Called from tests/libc/math_h.c:64.
 [eva] Done for function fabs
 [eva] computing for function fabs <- main.
-  Called from tests/libc/math_h.c:50.
+  Called from tests/libc/math_h.c:64.
 [eva] Done for function fabs
 [eva] computing for function fabs <- main.
-  Called from tests/libc/math_h.c:50.
+  Called from tests/libc/math_h.c:64.
 [eva] Done for function fabs
 [eva] computing for function fabs <- main.
-  Called from tests/libc/math_h.c:50.
+  Called from tests/libc/math_h.c:64.
 [eva] Done for function fabs
 [eva] computing for function fabs <- main.
-  Called from tests/libc/math_h.c:50.
+  Called from tests/libc/math_h.c:64.
 [eva] Done for function fabs
 [eva] computing for function fabs <- main.
-  Called from tests/libc/math_h.c:50.
+  Called from tests/libc/math_h.c:64.
 [eva] Done for function fabs
 [eva] computing for function fabs <- main.
-  Called from tests/libc/math_h.c:50.
+  Called from tests/libc/math_h.c:64.
 [eva] Done for function fabs
 [eva] computing for function fabs <- main.
-  Called from tests/libc/math_h.c:50.
+  Called from tests/libc/math_h.c:64.
 [eva] Done for function fabs
 [eva] computing for function fabs <- main.
-  Called from tests/libc/math_h.c:50.
+  Called from tests/libc/math_h.c:64.
 [eva] Done for function fabs
 [eva] computing for function fabsf <- main.
-  Called from tests/libc/math_h.c:51.
+  Called from tests/libc/math_h.c:65.
 [eva] using specification for function fabsf
 [eva] Done for function fabsf
 [eva] computing for function fabsf <- main.
-  Called from tests/libc/math_h.c:51.
+  Called from tests/libc/math_h.c:65.
 [eva] Done for function fabsf
 [eva] computing for function fabsf <- main.
-  Called from tests/libc/math_h.c:51.
+  Called from tests/libc/math_h.c:65.
 [eva] Done for function fabsf
 [eva] computing for function fabsf <- main.
-  Called from tests/libc/math_h.c:51.
+  Called from tests/libc/math_h.c:65.
 [eva] Done for function fabsf
 [eva] computing for function fabsf <- main.
-  Called from tests/libc/math_h.c:51.
+  Called from tests/libc/math_h.c:65.
 [eva] Done for function fabsf
 [eva] computing for function fabsf <- main.
-  Called from tests/libc/math_h.c:51.
+  Called from tests/libc/math_h.c:65.
 [eva] Done for function fabsf
 [eva] computing for function fabsf <- main.
-  Called from tests/libc/math_h.c:51.
+  Called from tests/libc/math_h.c:65.
 [eva] Done for function fabsf
 [eva] computing for function fabsf <- main.
-  Called from tests/libc/math_h.c:51.
+  Called from tests/libc/math_h.c:65.
 [eva] Done for function fabsf
 [eva] computing for function fabsf <- main.
-  Called from tests/libc/math_h.c:51.
+  Called from tests/libc/math_h.c:65.
 [eva] Done for function fabsf
 [eva] computing for function fabsl <- main.
-  Called from tests/libc/math_h.c:52.
+  Called from tests/libc/math_h.c:66.
 [eva] using specification for function fabsl
 [eva] Done for function fabsl
 [eva] computing for function fabsl <- main.
-  Called from tests/libc/math_h.c:52.
+  Called from tests/libc/math_h.c:66.
 [eva] Done for function fabsl
 [eva] computing for function fabsl <- main.
-  Called from tests/libc/math_h.c:52.
+  Called from tests/libc/math_h.c:66.
 [eva] Done for function fabsl
 [eva] computing for function fabsl <- main.
-  Called from tests/libc/math_h.c:52.
+  Called from tests/libc/math_h.c:66.
 [eva] Done for function fabsl
 [eva] computing for function fabsl <- main.
-  Called from tests/libc/math_h.c:52.
+  Called from tests/libc/math_h.c:66.
 [eva] Done for function fabsl
 [eva] computing for function fabsl <- main.
-  Called from tests/libc/math_h.c:52.
+  Called from tests/libc/math_h.c:66.
 [eva] Done for function fabsl
 [eva] computing for function fabsl <- main.
-  Called from tests/libc/math_h.c:52.
+  Called from tests/libc/math_h.c:66.
 [eva] Done for function fabsl
 [eva] computing for function fabsl <- main.
-  Called from tests/libc/math_h.c:52.
+  Called from tests/libc/math_h.c:66.
 [eva] Done for function fabsl
 [eva] computing for function fabsl <- main.
-  Called from tests/libc/math_h.c:52.
+  Called from tests/libc/math_h.c:66.
 [eva] Done for function fabsl
 [eva] computing for function fabsl <- main.
-  Called from tests/libc/math_h.c:52.
+  Called from tests/libc/math_h.c:66.
 [eva] Done for function fabsl
 [eva] computing for function fabsl <- main.
-  Called from tests/libc/math_h.c:52.
+  Called from tests/libc/math_h.c:66.
 [eva] Done for function fabsl
 [eva] computing for function fabsl <- main.
-  Called from tests/libc/math_h.c:52.
+  Called from tests/libc/math_h.c:66.
 [eva] Done for function fabsl
 [eva] computing for function fabsl <- main.
-  Called from tests/libc/math_h.c:52.
+  Called from tests/libc/math_h.c:66.
 [eva] Done for function fabsl
 [eva] computing for function fabsl <- main.
-  Called from tests/libc/math_h.c:52.
+  Called from tests/libc/math_h.c:66.
 [eva] Done for function fabsl
 [eva] computing for function fabsl <- main.
-  Called from tests/libc/math_h.c:52.
+  Called from tests/libc/math_h.c:66.
 [eva] Done for function fabsl
 [eva] computing for function fabsl <- main.
-  Called from tests/libc/math_h.c:52.
+  Called from tests/libc/math_h.c:66.
 [eva] Done for function fabsl
 [eva] computing for function fabsl <- main.
-  Called from tests/libc/math_h.c:52.
+  Called from tests/libc/math_h.c:66.
 [eva] Done for function fabsl
 [eva] computing for function fabsl <- main.
-  Called from tests/libc/math_h.c:52.
+  Called from tests/libc/math_h.c:66.
 [eva] Done for function fabsl
 [eva] computing for function fabsl <- main.
-  Called from tests/libc/math_h.c:52.
+  Called from tests/libc/math_h.c:66.
 [eva] Done for function fabsl
 [eva] computing for function fabsl <- main.
-  Called from tests/libc/math_h.c:52.
+  Called from tests/libc/math_h.c:66.
 [eva] Done for function fabsl
 [eva] computing for function fabsl <- main.
-  Called from tests/libc/math_h.c:52.
+  Called from tests/libc/math_h.c:66.
 [eva] Done for function fabsl
 [eva] computing for function fabsl <- main.
-  Called from tests/libc/math_h.c:52.
+  Called from tests/libc/math_h.c:66.
 [eva] Done for function fabsl
 [eva] computing for function fabsl <- main.
-  Called from tests/libc/math_h.c:52.
+  Called from tests/libc/math_h.c:66.
 [eva] Done for function fabsl
 [eva] computing for function fabsl <- main.
-  Called from tests/libc/math_h.c:52.
+  Called from tests/libc/math_h.c:66.
 [eva] Done for function fabsl
 [eva] computing for function fabsl <- main.
-  Called from tests/libc/math_h.c:52.
+  Called from tests/libc/math_h.c:66.
 [eva] Done for function fabsl
 [eva] computing for function fabsl <- main.
-  Called from tests/libc/math_h.c:52.
+  Called from tests/libc/math_h.c:66.
 [eva] Done for function fabsl
 [eva] computing for function fabsl <- main.
-  Called from tests/libc/math_h.c:52.
+  Called from tests/libc/math_h.c:66.
 [eva] Done for function fabsl
+[eva] computing for function frexp <- main.
+  Called from tests/libc/math_h.c:68.
+[eva] using specification for function frexp
+[eva] tests/libc/math_h.c:68: 
+  function frexp: precondition 'valid_exp' got status valid.
+[eva] Done for function frexp
+[eva] computing for function frexp <- main.
+  Called from tests/libc/math_h.c:68.
+[eva] tests/libc/math_h.c:68: 
+  function frexp: precondition 'valid_exp' got status valid.
+[eva] Done for function frexp
+[eva] computing for function frexp <- main.
+  Called from tests/libc/math_h.c:68.
+[eva] tests/libc/math_h.c:68: 
+  function frexp: precondition 'valid_exp' got status valid.
+[eva] Done for function frexp
+[eva] computing for function frexp <- main.
+  Called from tests/libc/math_h.c:68.
+[eva] tests/libc/math_h.c:68: 
+  function frexp: precondition 'valid_exp' got status valid.
+[eva] Done for function frexp
+[eva] computing for function frexp <- main.
+  Called from tests/libc/math_h.c:68.
+[eva] tests/libc/math_h.c:68: 
+  function frexp: precondition 'valid_exp' got status valid.
+[eva] Done for function frexp
+[eva] computing for function frexp <- main.
+  Called from tests/libc/math_h.c:68.
+[eva] tests/libc/math_h.c:68: 
+  function frexp: precondition 'valid_exp' got status valid.
+[eva] Done for function frexp
+[eva] computing for function frexp <- main.
+  Called from tests/libc/math_h.c:68.
+[eva] tests/libc/math_h.c:68: 
+  function frexp: precondition 'valid_exp' got status valid.
+[eva] Done for function frexp
+[eva] computing for function frexp <- main.
+  Called from tests/libc/math_h.c:68.
+[eva] tests/libc/math_h.c:68: 
+  function frexp: precondition 'valid_exp' got status valid.
+[eva] Done for function frexp
+[eva] computing for function frexp <- main.
+  Called from tests/libc/math_h.c:68.
+[eva] tests/libc/math_h.c:68: 
+  function frexp: precondition 'valid_exp' got status valid.
+[eva] Done for function frexp
+[eva] computing for function frexpf <- main.
+  Called from tests/libc/math_h.c:69.
+[eva] using specification for function frexpf
+[eva] tests/libc/math_h.c:69: 
+  function frexpf: precondition 'valid_exp' got status valid.
+[eva] Done for function frexpf
+[eva] computing for function frexpf <- main.
+  Called from tests/libc/math_h.c:69.
+[eva] tests/libc/math_h.c:69: 
+  function frexpf: precondition 'valid_exp' got status valid.
+[eva] Done for function frexpf
+[eva] computing for function frexpf <- main.
+  Called from tests/libc/math_h.c:69.
+[eva] tests/libc/math_h.c:69: 
+  function frexpf: precondition 'valid_exp' got status valid.
+[eva] Done for function frexpf
+[eva] computing for function frexpf <- main.
+  Called from tests/libc/math_h.c:69.
+[eva] tests/libc/math_h.c:69: 
+  function frexpf: precondition 'valid_exp' got status valid.
+[eva] Done for function frexpf
+[eva] computing for function frexpf <- main.
+  Called from tests/libc/math_h.c:69.
+[eva] tests/libc/math_h.c:69: 
+  function frexpf: precondition 'valid_exp' got status valid.
+[eva] Done for function frexpf
+[eva] computing for function frexpf <- main.
+  Called from tests/libc/math_h.c:69.
+[eva] tests/libc/math_h.c:69: 
+  function frexpf: precondition 'valid_exp' got status valid.
+[eva] Done for function frexpf
+[eva] computing for function frexpf <- main.
+  Called from tests/libc/math_h.c:69.
+[eva] tests/libc/math_h.c:69: 
+  function frexpf: precondition 'valid_exp' got status valid.
+[eva] Done for function frexpf
+[eva] computing for function frexpf <- main.
+  Called from tests/libc/math_h.c:69.
+[eva] tests/libc/math_h.c:69: 
+  function frexpf: precondition 'valid_exp' got status valid.
+[eva] Done for function frexpf
+[eva] computing for function frexpf <- main.
+  Called from tests/libc/math_h.c:69.
+[eva] tests/libc/math_h.c:69: 
+  function frexpf: precondition 'valid_exp' got status valid.
+[eva] Done for function frexpf
+[eva] computing for function frexpl <- main.
+  Called from tests/libc/math_h.c:70.
+[eva] using specification for function frexpl
+[eva] tests/libc/math_h.c:70: 
+  function frexpl: precondition 'valid_exp' got status valid.
+[eva] Done for function frexpl
+[eva] computing for function frexpl <- main.
+  Called from tests/libc/math_h.c:70.
+[eva] tests/libc/math_h.c:70: 
+  function frexpl: precondition 'valid_exp' got status valid.
+[eva] Done for function frexpl
+[eva] computing for function frexpl <- main.
+  Called from tests/libc/math_h.c:70.
+[eva] tests/libc/math_h.c:70: 
+  function frexpl: precondition 'valid_exp' got status valid.
+[eva] Done for function frexpl
+[eva] computing for function frexpl <- main.
+  Called from tests/libc/math_h.c:70.
+[eva] tests/libc/math_h.c:70: 
+  function frexpl: precondition 'valid_exp' got status valid.
+[eva] Done for function frexpl
+[eva] computing for function frexpl <- main.
+  Called from tests/libc/math_h.c:70.
+[eva] tests/libc/math_h.c:70: 
+  function frexpl: precondition 'valid_exp' got status valid.
+[eva] Done for function frexpl
+[eva] computing for function frexpl <- main.
+  Called from tests/libc/math_h.c:70.
+[eva] tests/libc/math_h.c:70: 
+  function frexpl: precondition 'valid_exp' got status valid.
+[eva] Done for function frexpl
+[eva] computing for function frexpl <- main.
+  Called from tests/libc/math_h.c:70.
+[eva] tests/libc/math_h.c:70: 
+  function frexpl: precondition 'valid_exp' got status valid.
+[eva] Done for function frexpl
+[eva] computing for function frexpl <- main.
+  Called from tests/libc/math_h.c:70.
+[eva] tests/libc/math_h.c:70: 
+  function frexpl: precondition 'valid_exp' got status valid.
+[eva] Done for function frexpl
+[eva] computing for function frexpl <- main.
+  Called from tests/libc/math_h.c:70.
+[eva] tests/libc/math_h.c:70: 
+  function frexpl: precondition 'valid_exp' got status valid.
+[eva] Done for function frexpl
+[eva] computing for function ldexp <- main.
+  Called from tests/libc/math_h.c:71.
+[eva] using specification for function ldexp
+[eva] Done for function ldexp
+[eva] computing for function ldexp <- main.
+  Called from tests/libc/math_h.c:71.
+[eva] Done for function ldexp
+[eva] computing for function ldexp <- main.
+  Called from tests/libc/math_h.c:71.
+[eva] Done for function ldexp
+[eva] computing for function ldexp <- main.
+  Called from tests/libc/math_h.c:71.
+[eva] Done for function ldexp
+[eva] computing for function ldexp <- main.
+  Called from tests/libc/math_h.c:71.
+[eva] Done for function ldexp
+[eva] computing for function ldexp <- main.
+  Called from tests/libc/math_h.c:71.
+[eva] Done for function ldexp
+[eva] computing for function ldexp <- main.
+  Called from tests/libc/math_h.c:71.
+[eva] Done for function ldexp
+[eva] computing for function ldexp <- main.
+  Called from tests/libc/math_h.c:71.
+[eva] Done for function ldexp
+[eva] computing for function ldexp <- main.
+  Called from tests/libc/math_h.c:71.
+[eva] Done for function ldexp
+[eva] computing for function ldexpf <- main.
+  Called from tests/libc/math_h.c:72.
+[eva] using specification for function ldexpf
+[eva] Done for function ldexpf
+[eva] computing for function ldexpf <- main.
+  Called from tests/libc/math_h.c:72.
+[eva] Done for function ldexpf
+[eva] computing for function ldexpf <- main.
+  Called from tests/libc/math_h.c:72.
+[eva] Done for function ldexpf
+[eva] computing for function ldexpf <- main.
+  Called from tests/libc/math_h.c:72.
+[eva] Done for function ldexpf
+[eva] computing for function ldexpf <- main.
+  Called from tests/libc/math_h.c:72.
+[eva] Done for function ldexpf
+[eva] computing for function ldexpf <- main.
+  Called from tests/libc/math_h.c:72.
+[eva] Done for function ldexpf
+[eva] computing for function ldexpf <- main.
+  Called from tests/libc/math_h.c:72.
+[eva] Done for function ldexpf
+[eva] computing for function ldexpf <- main.
+  Called from tests/libc/math_h.c:72.
+[eva] Done for function ldexpf
+[eva] computing for function ldexpf <- main.
+  Called from tests/libc/math_h.c:72.
+[eva] Done for function ldexpf
+[eva] computing for function ldexpf <- main.
+  Called from tests/libc/math_h.c:72.
+[eva] Done for function ldexpf
+[eva] computing for function ldexpf <- main.
+  Called from tests/libc/math_h.c:72.
+[eva] Done for function ldexpf
+[eva] computing for function ldexpf <- main.
+  Called from tests/libc/math_h.c:72.
+[eva] Done for function ldexpf
+[eva] computing for function ldexpf <- main.
+  Called from tests/libc/math_h.c:72.
+[eva] Done for function ldexpf
+[eva] computing for function ldexpf <- main.
+  Called from tests/libc/math_h.c:72.
+[eva] Done for function ldexpf
+[eva] computing for function ldexpf <- main.
+  Called from tests/libc/math_h.c:72.
+[eva] Done for function ldexpf
+[eva] computing for function ldexpf <- main.
+  Called from tests/libc/math_h.c:72.
+[eva] Done for function ldexpf
+[eva] computing for function ldexpf <- main.
+  Called from tests/libc/math_h.c:72.
+[eva] Done for function ldexpf
+[eva] computing for function ldexpf <- main.
+  Called from tests/libc/math_h.c:72.
+[eva] Done for function ldexpf
+[eva] computing for function ldexp <- main.
+  Called from tests/libc/math_h.c:74.
+[eva] Done for function ldexp
+[eva] computing for function ldexp <- main.
+  Called from tests/libc/math_h.c:74.
+[eva] Done for function ldexp
+[eva] computing for function ldexp <- main.
+  Called from tests/libc/math_h.c:74.
+[eva] Done for function ldexp
+[eva] computing for function ldexp <- main.
+  Called from tests/libc/math_h.c:74.
+[eva] Done for function ldexp
+[eva] computing for function ldexp <- main.
+  Called from tests/libc/math_h.c:74.
+[eva] Done for function ldexp
+[eva] computing for function ldexp <- main.
+  Called from tests/libc/math_h.c:74.
+[eva] Done for function ldexp
+[eva] computing for function ldexp <- main.
+  Called from tests/libc/math_h.c:74.
+[eva] Done for function ldexp
+[eva] computing for function ldexp <- main.
+  Called from tests/libc/math_h.c:74.
+[eva] Done for function ldexp
+[eva] computing for function ldexp <- main.
+  Called from tests/libc/math_h.c:74.
+[eva] Done for function ldexp
+[eva] computing for function ldexpf <- main.
+  Called from tests/libc/math_h.c:75.
+[eva] Done for function ldexpf
+[eva] computing for function ldexpf <- main.
+  Called from tests/libc/math_h.c:75.
+[eva] Done for function ldexpf
+[eva] computing for function ldexpf <- main.
+  Called from tests/libc/math_h.c:75.
+[eva] Done for function ldexpf
+[eva] computing for function ldexpf <- main.
+  Called from tests/libc/math_h.c:75.
+[eva] Done for function ldexpf
+[eva] computing for function ldexpf <- main.
+  Called from tests/libc/math_h.c:75.
+[eva] Done for function ldexpf
+[eva] computing for function ldexpf <- main.
+  Called from tests/libc/math_h.c:75.
+[eva] Done for function ldexpf
+[eva] computing for function ldexpf <- main.
+  Called from tests/libc/math_h.c:75.
+[eva] Done for function ldexpf
+[eva] computing for function ldexpf <- main.
+  Called from tests/libc/math_h.c:75.
+[eva] Done for function ldexpf
+[eva] computing for function ldexpf <- main.
+  Called from tests/libc/math_h.c:75.
+[eva] Done for function ldexpf
+[eva] computing for function ldexpf <- main.
+  Called from tests/libc/math_h.c:75.
+[eva] Done for function ldexpf
+[eva] computing for function ldexpf <- main.
+  Called from tests/libc/math_h.c:75.
+[eva] Done for function ldexpf
+[eva] computing for function ldexpf <- main.
+  Called from tests/libc/math_h.c:75.
+[eva] Done for function ldexpf
+[eva] computing for function ldexpf <- main.
+  Called from tests/libc/math_h.c:75.
+[eva] Done for function ldexpf
+[eva] computing for function ldexpf <- main.
+  Called from tests/libc/math_h.c:75.
+[eva] Done for function ldexpf
+[eva] computing for function ldexpf <- main.
+  Called from tests/libc/math_h.c:75.
+[eva] Done for function ldexpf
+[eva] computing for function ldexpf <- main.
+  Called from tests/libc/math_h.c:75.
+[eva] Done for function ldexpf
+[eva] computing for function ldexpf <- main.
+  Called from tests/libc/math_h.c:75.
+[eva] Done for function ldexpf
+[eva] computing for function ldexpf <- main.
+  Called from tests/libc/math_h.c:75.
+[eva] Done for function ldexpf
+[eva] computing for function ldexp <- main.
+  Called from tests/libc/math_h.c:77.
+[eva] Done for function ldexp
+[eva] computing for function ldexp <- main.
+  Called from tests/libc/math_h.c:77.
+[eva] Done for function ldexp
+[eva] computing for function ldexp <- main.
+  Called from tests/libc/math_h.c:77.
+[eva] Done for function ldexp
+[eva] computing for function ldexp <- main.
+  Called from tests/libc/math_h.c:77.
+[eva] Done for function ldexp
+[eva] computing for function ldexp <- main.
+  Called from tests/libc/math_h.c:77.
+[eva] Done for function ldexp
+[eva] computing for function ldexp <- main.
+  Called from tests/libc/math_h.c:77.
+[eva] Done for function ldexp
+[eva] computing for function ldexp <- main.
+  Called from tests/libc/math_h.c:77.
+[eva] Done for function ldexp
+[eva] computing for function ldexp <- main.
+  Called from tests/libc/math_h.c:77.
+[eva] Done for function ldexp
+[eva] computing for function ldexp <- main.
+  Called from tests/libc/math_h.c:77.
+[eva] Done for function ldexp
+[eva] computing for function ldexpf <- main.
+  Called from tests/libc/math_h.c:78.
+[eva] Done for function ldexpf
+[eva] computing for function ldexpf <- main.
+  Called from tests/libc/math_h.c:78.
+[eva] Done for function ldexpf
+[eva] computing for function ldexpf <- main.
+  Called from tests/libc/math_h.c:78.
+[eva] Done for function ldexpf
+[eva] computing for function ldexpf <- main.
+  Called from tests/libc/math_h.c:78.
+[eva] Done for function ldexpf
+[eva] computing for function ldexpf <- main.
+  Called from tests/libc/math_h.c:78.
+[eva] Done for function ldexpf
+[eva] computing for function ldexpf <- main.
+  Called from tests/libc/math_h.c:78.
+[eva] Done for function ldexpf
+[eva] computing for function ldexpf <- main.
+  Called from tests/libc/math_h.c:78.
+[eva] Done for function ldexpf
+[eva] computing for function ldexpf <- main.
+  Called from tests/libc/math_h.c:78.
+[eva] Done for function ldexpf
+[eva] computing for function ldexpf <- main.
+  Called from tests/libc/math_h.c:78.
+[eva] Done for function ldexpf
+[eva] computing for function ldexpf <- main.
+  Called from tests/libc/math_h.c:78.
+[eva] Done for function ldexpf
+[eva] computing for function ldexpf <- main.
+  Called from tests/libc/math_h.c:78.
+[eva] Done for function ldexpf
+[eva] computing for function ldexpf <- main.
+  Called from tests/libc/math_h.c:78.
+[eva] Done for function ldexpf
+[eva] computing for function ldexpf <- main.
+  Called from tests/libc/math_h.c:78.
+[eva] Done for function ldexpf
+[eva] computing for function ldexpf <- main.
+  Called from tests/libc/math_h.c:78.
+[eva] Done for function ldexpf
+[eva] computing for function ldexpf <- main.
+  Called from tests/libc/math_h.c:78.
+[eva] Done for function ldexpf
+[eva] computing for function ldexpf <- main.
+  Called from tests/libc/math_h.c:78.
+[eva] Done for function ldexpf
+[eva] computing for function ldexpf <- main.
+  Called from tests/libc/math_h.c:78.
+[eva] Done for function ldexpf
+[eva] computing for function ldexpf <- main.
+  Called from tests/libc/math_h.c:78.
+[eva] Done for function ldexpf
+[eva] computing for function ldexp <- main.
+  Called from tests/libc/math_h.c:80.
+[eva] Done for function ldexp
+[eva] computing for function ldexp <- main.
+  Called from tests/libc/math_h.c:80.
+[eva] Done for function ldexp
+[eva] computing for function ldexp <- main.
+  Called from tests/libc/math_h.c:80.
+[eva] Done for function ldexp
+[eva] computing for function ldexp <- main.
+  Called from tests/libc/math_h.c:80.
+[eva] Done for function ldexp
+[eva] computing for function ldexp <- main.
+  Called from tests/libc/math_h.c:80.
+[eva] Done for function ldexp
+[eva] computing for function ldexp <- main.
+  Called from tests/libc/math_h.c:80.
+[eva] Done for function ldexp
+[eva] computing for function ldexp <- main.
+  Called from tests/libc/math_h.c:80.
+[eva] Done for function ldexp
+[eva] computing for function ldexp <- main.
+  Called from tests/libc/math_h.c:80.
+[eva] Done for function ldexp
+[eva] computing for function ldexp <- main.
+  Called from tests/libc/math_h.c:80.
+[eva] Done for function ldexp
+[eva] computing for function ldexpf <- main.
+  Called from tests/libc/math_h.c:81.
+[eva] Done for function ldexpf
+[eva] computing for function ldexpf <- main.
+  Called from tests/libc/math_h.c:81.
+[eva] Done for function ldexpf
+[eva] computing for function ldexpf <- main.
+  Called from tests/libc/math_h.c:81.
+[eva] Done for function ldexpf
+[eva] computing for function ldexpf <- main.
+  Called from tests/libc/math_h.c:81.
+[eva] Done for function ldexpf
+[eva] computing for function ldexpf <- main.
+  Called from tests/libc/math_h.c:81.
+[eva] Done for function ldexpf
+[eva] computing for function ldexpf <- main.
+  Called from tests/libc/math_h.c:81.
+[eva] Done for function ldexpf
+[eva] computing for function ldexpf <- main.
+  Called from tests/libc/math_h.c:81.
+[eva] Done for function ldexpf
+[eva] computing for function ldexpf <- main.
+  Called from tests/libc/math_h.c:81.
+[eva] Done for function ldexpf
+[eva] computing for function ldexpf <- main.
+  Called from tests/libc/math_h.c:81.
+[eva] Done for function ldexpf
+[eva] computing for function ldexpf <- main.
+  Called from tests/libc/math_h.c:81.
+[eva] Done for function ldexpf
+[eva] computing for function ldexpf <- main.
+  Called from tests/libc/math_h.c:81.
+[eva] Done for function ldexpf
+[eva] computing for function ldexpf <- main.
+  Called from tests/libc/math_h.c:81.
+[eva] Done for function ldexpf
+[eva] computing for function ldexpf <- main.
+  Called from tests/libc/math_h.c:81.
+[eva] Done for function ldexpf
+[eva] computing for function ldexpf <- main.
+  Called from tests/libc/math_h.c:81.
+[eva] Done for function ldexpf
+[eva] computing for function ldexpf <- main.
+  Called from tests/libc/math_h.c:81.
+[eva] Done for function ldexpf
+[eva] computing for function ldexpf <- main.
+  Called from tests/libc/math_h.c:81.
+[eva] Done for function ldexpf
+[eva] computing for function ldexpf <- main.
+  Called from tests/libc/math_h.c:81.
+[eva] Done for function ldexpf
+[eva] computing for function ldexpf <- main.
+  Called from tests/libc/math_h.c:81.
+[eva] Done for function ldexpf
 [eva] computing for function __finite <- main.
-  Called from tests/libc/math_h.c:56.
+  Called from tests/libc/math_h.c:86.
 [eva] using specification for function __finite
 [eva] Done for function __finite
-[eva] tests/libc/math_h.c:57: assertion got status valid.
+[eva] tests/libc/math_h.c:87: assertion got status valid.
 [eva] computing for function __finite <- main.
-  Called from tests/libc/math_h.c:58.
+  Called from tests/libc/math_h.c:88.
 [eva] Done for function __finite
 [eva] computing for function __finite <- main.
-  Called from tests/libc/math_h.c:58.
+  Called from tests/libc/math_h.c:88.
 [eva] Done for function __finite
-[eva] tests/libc/math_h.c:59: assertion got status valid.
+[eva] tests/libc/math_h.c:89: assertion got status valid.
 [eva] computing for function __finitef <- main.
-  Called from tests/libc/math_h.c:60.
+  Called from tests/libc/math_h.c:90.
 [eva] using specification for function __finitef
 [eva] Done for function __finitef
 [eva] computing for function __finitef <- main.
-  Called from tests/libc/math_h.c:60.
+  Called from tests/libc/math_h.c:90.
 [eva] Done for function __finitef
-[eva] tests/libc/math_h.c:61: assertion got status valid.
+[eva] tests/libc/math_h.c:91: assertion got status valid.
 [eva] computing for function __finite <- main.
-  Called from tests/libc/math_h.c:62.
+  Called from tests/libc/math_h.c:92.
 [eva] Done for function __finite
 [eva] computing for function __finite <- main.
-  Called from tests/libc/math_h.c:62.
+  Called from tests/libc/math_h.c:92.
 [eva] Done for function __finite
-[eva] tests/libc/math_h.c:63: assertion got status valid.
+[eva] tests/libc/math_h.c:93: assertion got status valid.
 [eva] computing for function __finitef <- main.
-  Called from tests/libc/math_h.c:64.
+  Called from tests/libc/math_h.c:94.
 [eva] Done for function __finitef
-[eva] tests/libc/math_h.c:65: assertion got status valid.
+[eva] tests/libc/math_h.c:95: assertion got status valid.
 [eva] computing for function __finitef <- main.
-  Called from tests/libc/math_h.c:66.
+  Called from tests/libc/math_h.c:96.
 [eva] Done for function __finitef
-[eva] tests/libc/math_h.c:67: assertion got status valid.
-[eva] computing for function test_simple_specs <- main.
-  Called from tests/libc/math_h.c:70.
-[eva] computing for function frexp <- test_simple_specs <- main.
-  Called from tests/libc/math_h.c:82.
-[eva] using specification for function frexp
-[eva] tests/libc/math_h.c:82: 
-  function frexp: precondition 'valid_exp' got status valid.
-[eva] Done for function frexp
-[eva] computing for function frexpf <- test_simple_specs <- main.
-  Called from tests/libc/math_h.c:82.
-[eva] using specification for function frexpf
-[eva] tests/libc/math_h.c:82: 
-  function frexpf: precondition 'valid_exp' got status valid.
-[eva] Done for function frexpf
-[eva] computing for function frexpl <- test_simple_specs <- main.
-  Called from tests/libc/math_h.c:82.
-[eva] using specification for function frexpl
-[eva] tests/libc/math_h.c:82: 
-  function frexpl: precondition 'valid_exp' got status valid.
-[eva] Done for function frexpl
-[eva] computing for function ldexp <- test_simple_specs <- main.
-  Called from tests/libc/math_h.c:83.
-[eva] using specification for function ldexp
-[eva] Done for function ldexp
-[eva] computing for function ldexpf <- test_simple_specs <- main.
-  Called from tests/libc/math_h.c:83.
-[eva] using specification for function ldexpf
-[eva] Done for function ldexpf
-[eva] computing for function ldexpl <- test_simple_specs <- main.
-  Called from tests/libc/math_h.c:83.
-[eva] using specification for function ldexpl
-[eva] Done for function ldexpl
-[eva] tests/libc/math_h.c:84: assertion got status valid.
-[eva] Recording results for test_simple_specs
-[eva] Done for function test_simple_specs
+[eva] tests/libc/math_h.c:97: assertion got status valid.
 [eva] Recording results for main
 [eva] done for function main
 [eva] ====== VALUES COMPUTED ======
-[eva:final-states] Values at end of function test_simple_specs:
-  exponent ∈ [--..--]
-  res_frexp ∈ [-inf .. inf] ∪ {NaN}
-  res_frexpf ∈ [-inf .. inf] ∪ {NaN}
-  res_frexpl ∈ [-inf .. inf] ∪ {NaN}
-  res_ldexp ∈ [-inf .. inf] ∪ {NaN}
-  res_ldexpf ∈ [-inf .. inf] ∪ {NaN}
-  res_ldexpl ∈ [-inf .. inf] ∪ {NaN}
 [eva:final-states] Values at end of function main:
+  __fc_errno ∈ [--..--]
   atan_pi ∈ {1.26262725568}
   atan_half_pi ∈ {1.00388482185}
   atan_e ∈ {1.21828290502}
@@ -377,5 +799,105 @@
   fabsl_minus_one ∈ [-inf .. inf]
   fabsl_large ∈ [-inf .. inf]
   fabsl_ld_top ∈ [-inf .. inf] ∪ {NaN}
+  exponent ∈ [--..--]
+  frexp_pi ∈ [0.5 .. 1.]
+  frexp_half_pi ∈ [0.5 .. 1.]
+  frexp_e ∈ [0.5 .. 1.]
+  frexp_zero ∈ [-0. .. 0.]
+  frexp_minus_zero ∈ [-0. .. 0.]
+  frexp_one ∈ [0.5 .. 1.]
+  frexp_minus_one ∈ [0.5 .. 1.]
+  frexp_large ∈ [0.5 .. 1.]
+  frexp_top ∈ [-inf .. inf] ∪ {NaN}
+  frexpf_f_pi ∈ [0.5 .. 0.999999940395]
+  frexpf_f_half_pi ∈ [0.5 .. 0.999999940395]
+  frexpf_f_e ∈ [0.5 .. 0.999999940395]
+  frexpf_zero ∈ [-0. .. 0.]
+  frexpf_minus_zero ∈ [-0. .. 0.]
+  frexpf_one ∈ [0.5 .. 0.999999940395]
+  frexpf_minus_one ∈ [0.5 .. 0.999999940395]
+  frexpf_large ∈ [0.5 .. 0.999999940395]
+  frexpf_f_top ∈ [-inf .. inf] ∪ {NaN}
+  frexpl_ld_pi ∈ [-inf .. inf]
+  frexpl_ld_half_pi ∈ [-inf .. inf]
+  frexpl_ld_e ∈ [-inf .. inf]
+  frexpl_zero ∈ [-inf .. inf]
+  frexpl_minus_zero ∈ [-inf .. inf]
+  frexpl_one ∈ [-inf .. inf]
+  frexpl_minus_one ∈ [-inf .. inf]
+  frexpl_large ∈ [-inf .. inf]
+  frexpl_ld_top ∈ [-inf .. inf] ∪ {NaN}
+  ldexp_pi ∈ [-1.79769313486e+308 .. 1.79769313486e+308]
+  ldexp_half_pi ∈ [-1.79769313486e+308 .. 1.79769313486e+308]
+  ldexp_e ∈ [-1.79769313486e+308 .. 1.79769313486e+308]
+  ldexp_zero ∈ [-1.79769313486e+308 .. 1.79769313486e+308]
+  ldexp_minus_zero ∈ [-1.79769313486e+308 .. 1.79769313486e+308]
+  ldexp_one ∈ [-1.79769313486e+308 .. 1.79769313486e+308]
+  ldexp_minus_one ∈ [-1.79769313486e+308 .. 1.79769313486e+308]
+  ldexp_large ∈ [-1.79769313486e+308 .. 1.79769313486e+308]
+  ldexp_top ∈ [-inf .. inf] ∪ {NaN}
+  ldexpf_f_pi ∈ [-3.40282346639e+38 .. 3.40282346639e+38]
+  ldexpf_f_half_pi ∈ [-3.40282346639e+38 .. 3.40282346639e+38]
+  ldexpf_f_e ∈ [-3.40282346639e+38 .. 3.40282346639e+38]
+  ldexpf_zero ∈ [-3.40282346639e+38 .. 3.40282346639e+38]
+  ldexpf_minus_zero ∈ [-3.40282346639e+38 .. 3.40282346639e+38]
+  ldexpf_one ∈ [-3.40282346639e+38 .. 3.40282346639e+38]
+  ldexpf_minus_one ∈ [-3.40282346639e+38 .. 3.40282346639e+38]
+  ldexpf_large ∈ [-inf .. inf]
+  ldexpf_f_top ∈ [-inf .. inf] ∪ {NaN}
+  ldexp_pi_zero ∈ [-1.79769313486e+308 .. 1.79769313486e+308]
+  ldexp_half_pi_zero ∈ [-1.79769313486e+308 .. 1.79769313486e+308]
+  ldexp_e_zero ∈ [-1.79769313486e+308 .. 1.79769313486e+308]
+  ldexp_zero_zero ∈ [-1.79769313486e+308 .. 1.79769313486e+308]
+  ldexp_minus_zero_zero ∈ [-1.79769313486e+308 .. 1.79769313486e+308]
+  ldexp_one_zero ∈ [-1.79769313486e+308 .. 1.79769313486e+308]
+  ldexp_minus_one_zero ∈ [-1.79769313486e+308 .. 1.79769313486e+308]
+  ldexp_large_zero ∈ [-1.79769313486e+308 .. 1.79769313486e+308]
+  ldexp_top_zero ∈ [-inf .. inf] ∪ {NaN}
+  ldexpf_f_pi_zero ∈ [-3.40282346639e+38 .. 3.40282346639e+38]
+  ldexpf_f_half_pi_zero ∈ [-3.40282346639e+38 .. 3.40282346639e+38]
+  ldexpf_f_e_zero ∈ [-3.40282346639e+38 .. 3.40282346639e+38]
+  ldexpf_zero_zero ∈ [-3.40282346639e+38 .. 3.40282346639e+38]
+  ldexpf_minus_zero_zero ∈ [-3.40282346639e+38 .. 3.40282346639e+38]
+  ldexpf_one_zero ∈ [-3.40282346639e+38 .. 3.40282346639e+38]
+  ldexpf_minus_one_zero ∈ [-3.40282346639e+38 .. 3.40282346639e+38]
+  ldexpf_large_zero ∈ [-3.40282346639e+38 .. 3.40282346639e+38]
+  ldexpf_f_top_zero ∈ [-inf .. inf] ∪ {NaN}
+  ldexp_pi_minus5 ∈ [-1.79769313486e+308 .. 1.79769313486e+308]
+  ldexp_half_pi_minus5 ∈ [-1.79769313486e+308 .. 1.79769313486e+308]
+  ldexp_e_minus5 ∈ [-1.79769313486e+308 .. 1.79769313486e+308]
+  ldexp_zero_minus5 ∈ [-1.79769313486e+308 .. 1.79769313486e+308]
+  ldexp_minus_zero_minus5 ∈ [-1.79769313486e+308 .. 1.79769313486e+308]
+  ldexp_one_minus5 ∈ [-1.79769313486e+308 .. 1.79769313486e+308]
+  ldexp_minus_one_minus5 ∈ [-1.79769313486e+308 .. 1.79769313486e+308]
+  ldexp_large_minus5 ∈ [-1.79769313486e+308 .. 1.79769313486e+308]
+  ldexp_top_minus5 ∈ [-inf .. inf] ∪ {NaN}
+  ldexpf_f_pi_minus5 ∈ [-3.40282346639e+38 .. 3.40282346639e+38]
+  ldexpf_f_half_pi_minus5 ∈ [-3.40282346639e+38 .. 3.40282346639e+38]
+  ldexpf_f_e_minus5 ∈ [-3.40282346639e+38 .. 3.40282346639e+38]
+  ldexpf_zero_minus5 ∈ [-3.40282346639e+38 .. 3.40282346639e+38]
+  ldexpf_minus_zero_minus5 ∈ [-3.40282346639e+38 .. 3.40282346639e+38]
+  ldexpf_one_minus5 ∈ [-3.40282346639e+38 .. 3.40282346639e+38]
+  ldexpf_minus_one_minus5 ∈ [-3.40282346639e+38 .. 3.40282346639e+38]
+  ldexpf_large_minus5 ∈ [-3.40282346639e+38 .. 3.40282346639e+38]
+  ldexpf_f_top_minus5 ∈ [-inf .. inf] ∪ {NaN}
+  ldexp_pi_huge ∈ [-inf .. inf]
+  ldexp_half_pi_huge ∈ [-inf .. inf]
+  ldexp_e_huge ∈ [-inf .. inf]
+  ldexp_zero_huge ∈ [-inf .. inf]
+  ldexp_minus_zero_huge ∈ [-inf .. inf]
+  ldexp_one_huge ∈ [-inf .. inf]
+  ldexp_minus_one_huge ∈ [-inf .. inf]
+  ldexp_large_huge ∈ [-inf .. inf]
+  ldexp_top_huge ∈ [-inf .. inf] ∪ {NaN}
+  ldexpf_f_pi_huge ∈ [-inf .. inf]
+  ldexpf_f_half_pi_huge ∈ [-inf .. inf]
+  ldexpf_f_e_huge ∈ [-inf .. inf]
+  ldexpf_zero_huge ∈ [-inf .. inf]
+  ldexpf_minus_zero_huge ∈ [-inf .. inf]
+  ldexpf_one_huge ∈ [-inf .. inf]
+  ldexpf_minus_one_huge ∈ [-inf .. inf]
+  ldexpf_large_huge ∈ [-inf .. inf]
+  ldexpf_f_top_huge ∈ [-inf .. inf] ∪ {NaN}
   r ∈ {0}
   __retres ∈ {0}
-- 
GitLab