@@ -220,21 +220,30 @@ int __isnormalf(float f)
220
220
221
221
float __builtin_inff (void )
222
222
{
223
+ #pragma CPROVER check push
224
+ #pragma CPROVER check disable "div-by-zero"
223
225
return 1.0f / 0.0f ;
226
+ #pragma CPROVER check pop
224
227
}
225
228
226
229
/* FUNCTION: __builtin_inf */
227
230
228
231
double __builtin_inf (void )
229
232
{
233
+ #pragma CPROVER check push
234
+ #pragma CPROVER check disable "div-by-zero"
230
235
return 1.0 / 0.0 ;
236
+ #pragma CPROVER check pop
231
237
}
232
238
233
239
/* FUNCTION: __builtin_infl */
234
240
235
241
long double __builtin_infl (void )
236
242
{
243
+ #pragma CPROVER check push
244
+ #pragma CPROVER check disable "div-by-zero"
237
245
return 1.0l / 0.0l ;
246
+ #pragma CPROVER check pop
238
247
}
239
248
240
249
/* FUNCTION: __builtin_isinf */
@@ -276,21 +285,30 @@ int __builtin_isnanf(float f)
276
285
277
286
float __builtin_huge_valf (void )
278
287
{
288
+ #pragma CPROVER check push
289
+ #pragma CPROVER check disable "div-by-zero"
279
290
return 1.0f / 0.0f ;
291
+ #pragma CPROVER check pop
280
292
}
281
293
282
294
/* FUNCTION: __builtin_huge_val */
283
295
284
296
double __builtin_huge_val (void )
285
297
{
298
+ #pragma CPROVER check push
299
+ #pragma CPROVER check disable "div-by-zero"
286
300
return 1.0 / 0.0 ;
301
+ #pragma CPROVER check pop
287
302
}
288
303
289
304
/* FUNCTION: __builtin_huge_vall */
290
305
291
306
long double __builtin_huge_vall (void )
292
307
{
308
+ #pragma CPROVER check push
309
+ #pragma CPROVER check disable "div-by-zero"
293
310
return 1.0l / 0.0l ;
311
+ #pragma CPROVER check pop
294
312
}
295
313
296
314
/* FUNCTION: _dsign */
@@ -597,7 +615,10 @@ double __builtin_nan(const char *str)
597
615
// the 'str' argument is not yet used
598
616
__CPROVER_hide :;
599
617
(void )* str ;
618
+ #pragma CPROVER check push
619
+ #pragma CPROVER check disable "div-by-zero"
600
620
return 0.0 /0.0 ;
621
+ #pragma CPROVER check pop
601
622
}
602
623
603
624
/* FUNCTION: __builtin_nanf */
@@ -607,7 +628,10 @@ float __builtin_nanf(const char *str)
607
628
// the 'str' argument is not yet used
608
629
__CPROVER_hide :;
609
630
(void )* str ;
631
+ #pragma CPROVER check push
632
+ #pragma CPROVER check disable "div-by-zero"
610
633
return 0.0f /0.0f ;
634
+ #pragma CPROVER check pop
611
635
}
612
636
613
637
@@ -630,7 +654,10 @@ double nan(const char *str) {
630
654
// the 'str' argument is not yet used
631
655
__CPROVER_hide :;
632
656
(void )* str ;
657
+ #pragma CPROVER check push
658
+ #pragma CPROVER check disable "div-by-zero"
633
659
return 0.0 /0.0 ;
660
+ #pragma CPROVER check pop
634
661
}
635
662
636
663
/* FUNCTION: nanf */
@@ -639,7 +666,10 @@ float nanf(const char *str) {
639
666
// the 'str' argument is not yet used
640
667
__CPROVER_hide :;
641
668
(void )* str ;
669
+ #pragma CPROVER check push
670
+ #pragma CPROVER check disable "div-by-zero"
642
671
return 0.0f /0.0f ;
672
+ #pragma CPROVER check pop
643
673
}
644
674
645
675
/* FUNCTION: nanl */
@@ -648,7 +678,10 @@ long double nanl(const char *str) {
648
678
// the 'str' argument is not yet used
649
679
__CPROVER_hide :;
650
680
(void )* str ;
681
+ #pragma CPROVER check push
682
+ #pragma CPROVER check disable "div-by-zero"
651
683
return 0.0 /0.0 ;
684
+ #pragma CPROVER check pop
652
685
}
653
686
654
687
/* FUNCTION: nextUpf */
@@ -676,7 +709,10 @@ float nextUpf(float f)
676
709
{
677
710
__CPROVER_hide :;
678
711
if (__CPROVER_isnanf (f ))
712
+ #pragma CPROVER check push
713
+ #pragma CPROVER check disable "div-by-zero"
679
714
return 0.0f /0.0f ; // NaN
715
+ #pragma CPROVER check pop
680
716
else if (f == 0.0f )
681
717
return 0x1p-149f ;
682
718
else if (f > 0.0f )
@@ -725,7 +761,10 @@ double nextUp(double d)
725
761
{
726
762
__CPROVER_hide :;
727
763
if (__CPROVER_isnand (d ))
764
+ #pragma CPROVER check push
765
+ #pragma CPROVER check disable "div-by-zero"
728
766
return 0.0 /0.0 ; // NaN
767
+ #pragma CPROVER check pop
729
768
else if (d == 0.0 )
730
769
return 0x1.0p-1074 ;
731
770
else if (d > 0.0 )
@@ -773,7 +812,10 @@ long double nextUpl(long double d)
773
812
{
774
813
__CPROVER_hide :;
775
814
if (__CPROVER_isnanld (d ))
815
+ #pragma CPROVER check push
816
+ #pragma CPROVER check disable "div-by-zero"
776
817
return 0.0 /0.0 ; // NaN
818
+ #pragma CPROVER check pop
777
819
else if (d == 0.0 )
778
820
{
779
821
union mixl m ;
@@ -840,7 +882,10 @@ float sqrtf(float f)
840
882
__CPROVER_hide :;
841
883
842
884
if ( f < 0.0f )
885
+ #pragma CPROVER check push
886
+ #pragma CPROVER check disable "div-by-zero"
843
887
return 0.0f /0.0f ; // NaN
888
+ #pragma CPROVER check pop
844
889
else if (__CPROVER_isinff (f ) || // +Inf only
845
890
f == 0.0f || // Includes -0
846
891
__CPROVER_isnanf (f ))
@@ -927,7 +972,10 @@ double sqrt(double d)
927
972
__CPROVER_hide :;
928
973
929
974
if ( d < 0.0 )
975
+ #pragma CPROVER check push
976
+ #pragma CPROVER check disable "div-by-zero"
930
977
return 0.0 /0.0 ; // NaN
978
+ #pragma CPROVER check pop
931
979
else if (__CPROVER_isinfd (d ) || // +Inf only
932
980
d == 0.0 || // Includes -0
933
981
__CPROVER_isnand (d ))
@@ -998,7 +1046,10 @@ long double sqrtl(long double d)
998
1046
__CPROVER_hide :;
999
1047
1000
1048
if (d < 0.0l )
1049
+ #pragma CPROVER check push
1050
+ #pragma CPROVER check disable "div-by-zero"
1001
1051
return 0.0l /0.0l ; // NaN
1052
+ #pragma CPROVER check pop
1002
1053
else if (__CPROVER_isinfld (d ) || // +Inf only
1003
1054
d == 0.0l || // Includes -0
1004
1055
__CPROVER_isnanld (d ))
@@ -2700,7 +2751,10 @@ double log(double x)
2700
2751
else if (__CPROVER_signd (x ))
2701
2752
{
2702
2753
errno = EDOM ;
2754
+ #pragma CPROVER check push
2755
+ #pragma CPROVER check disable "div-by-zero"
2703
2756
return 0.0 / 0.0 ;
2757
+ #pragma CPROVER check pop
2704
2758
}
2705
2759
2706
2760
_Static_assert (
@@ -2758,7 +2812,10 @@ float logf(float x)
2758
2812
else if (__CPROVER_signf (x ))
2759
2813
{
2760
2814
errno = EDOM ;
2815
+ #pragma CPROVER check push
2816
+ #pragma CPROVER check disable "div-by-zero"
2761
2817
return 0.0f / 0.0f ;
2818
+ #pragma CPROVER check pop
2762
2819
}
2763
2820
2764
2821
_Static_assert (
@@ -2817,7 +2874,10 @@ long double logl(long double x)
2817
2874
else if (__CPROVER_signld (x ))
2818
2875
{
2819
2876
errno = EDOM ;
2877
+ #pragma CPROVER check push
2878
+ #pragma CPROVER check disable "div-by-zero"
2820
2879
return 0.0l / 0.0l ;
2880
+ #pragma CPROVER check pop
2821
2881
}
2822
2882
2823
2883
#if LDBL_MAX_EXP == DBL_MAX_EXP
@@ -2881,7 +2941,10 @@ double log2(double x)
2881
2941
else if (__CPROVER_signd (x ))
2882
2942
{
2883
2943
errno = EDOM ;
2944
+ #pragma CPROVER check push
2945
+ #pragma CPROVER check disable "div-by-zero"
2884
2946
return 0.0 / 0.0 ;
2947
+ #pragma CPROVER check pop
2885
2948
}
2886
2949
2887
2950
_Static_assert (
@@ -2938,7 +3001,10 @@ float log2f(float x)
2938
3001
else if (__CPROVER_signf (x ))
2939
3002
{
2940
3003
errno = EDOM ;
3004
+ #pragma CPROVER check push
3005
+ #pragma CPROVER check disable "div-by-zero"
2941
3006
return 0.0f / 0.0f ;
3007
+ #pragma CPROVER check pop
2942
3008
}
2943
3009
2944
3010
_Static_assert (
@@ -2996,7 +3062,10 @@ long double log2l(long double x)
2996
3062
else if (__CPROVER_signld (x ))
2997
3063
{
2998
3064
errno = EDOM ;
3065
+ #pragma CPROVER check push
3066
+ #pragma CPROVER check disable "div-by-zero"
2999
3067
return 0.0l / 0.0l ;
3068
+ #pragma CPROVER check pop
3000
3069
}
3001
3070
3002
3071
#if LDBL_MAX_EXP == DBL_MAX_EXP
@@ -3060,7 +3129,10 @@ double log10(double x)
3060
3129
else if (__CPROVER_signd (x ))
3061
3130
{
3062
3131
errno = EDOM ;
3132
+ #pragma CPROVER check push
3133
+ #pragma CPROVER check disable "div-by-zero"
3063
3134
return 0.0 / 0.0 ;
3135
+ #pragma CPROVER check pop
3064
3136
}
3065
3137
3066
3138
_Static_assert (
@@ -3120,7 +3192,10 @@ float log10f(float x)
3120
3192
else if (__CPROVER_signf (x ))
3121
3193
{
3122
3194
errno = EDOM ;
3195
+ #pragma CPROVER check push
3196
+ #pragma CPROVER check disable "div-by-zero"
3123
3197
return 0.0f / 0.0f ;
3198
+ #pragma CPROVER check pop
3124
3199
}
3125
3200
3126
3201
_Static_assert (
@@ -3180,7 +3255,10 @@ long double log10l(long double x)
3180
3255
else if (__CPROVER_signld (x ))
3181
3256
{
3182
3257
errno = EDOM ;
3258
+ #pragma CPROVER check push
3259
+ #pragma CPROVER check disable "div-by-zero"
3183
3260
return 0.0l / 0.0l ;
3261
+ #pragma CPROVER check pop
3184
3262
}
3185
3263
3186
3264
#if LDBL_MAX_EXP == DBL_MAX_EXP
@@ -3237,7 +3315,10 @@ double pow(double x, double y)
3237
3315
nearbyint (y ) != y )
3238
3316
{
3239
3317
errno = EDOM ;
3318
+ #pragma CPROVER check push
3319
+ #pragma CPROVER check disable "div-by-zero"
3240
3320
return 0.0 / 0.0 ;
3321
+ #pragma CPROVER check pop
3241
3322
}
3242
3323
else if (x == 1.0 )
3243
3324
return 1.0 ;
@@ -3303,7 +3384,10 @@ double pow(double x, double y)
3303
3384
return HUGE_VAL ;
3304
3385
}
3305
3386
else if (isnan (x ) || isnan (y ))
3387
+ #pragma CPROVER check push
3388
+ #pragma CPROVER check disable "div-by-zero"
3306
3389
return 0.0 / 0.0 ;
3390
+ #pragma CPROVER check pop
3307
3391
3308
3392
_Static_assert (
3309
3393
sizeof (double ) == 2 * sizeof (int32_t ),
@@ -3366,7 +3450,10 @@ float powf(float x, float y)
3366
3450
nearbyintf (y ) != y )
3367
3451
{
3368
3452
errno = EDOM ;
3453
+ #pragma CPROVER check push
3454
+ #pragma CPROVER check disable "div-by-zero"
3369
3455
return 0.0f / 0.0f ;
3456
+ #pragma CPROVER check pop
3370
3457
}
3371
3458
else if (x == 1.0f )
3372
3459
return 1.0f ;
@@ -3435,7 +3522,10 @@ float powf(float x, float y)
3435
3522
return HUGE_VALF ;
3436
3523
}
3437
3524
else if (isnanf (x ) || isnanf (y ))
3525
+ #pragma CPROVER check push
3526
+ #pragma CPROVER check disable "div-by-zero"
3438
3527
return 0.0f / 0.0f ;
3528
+ #pragma CPROVER check pop
3439
3529
3440
3530
_Static_assert (
3441
3531
sizeof (float ) == sizeof (int32_t ),
@@ -3492,7 +3582,10 @@ long double powl(long double x, long double y)
3492
3582
nearbyintl (y ) != y )
3493
3583
{
3494
3584
errno = EDOM ;
3585
+ #pragma CPROVER check push
3586
+ #pragma CPROVER check disable "div-by-zero"
3495
3587
return 0.0l / 0.0l ;
3588
+ #pragma CPROVER check pop
3496
3589
}
3497
3590
else if (x == 1.0l )
3498
3591
return 1.0l ;
@@ -3562,7 +3655,10 @@ long double powl(long double x, long double y)
3562
3655
return HUGE_VALL ;
3563
3656
}
3564
3657
else if (isnanl (x ) || isnanl (y ))
3658
+ #pragma CPROVER check push
3659
+ #pragma CPROVER check disable "div-by-zero"
3565
3660
return 0.0l / 0.0l ;
3661
+ #pragma CPROVER check pop
3566
3662
3567
3663
#if LDBL_MAX_EXP == DBL_MAX_EXP
3568
3664
return pow (x , y );
@@ -3617,6 +3713,8 @@ double __builtin_inf(void);
3617
3713
double fma (double x , double y , double z )
3618
3714
{
3619
3715
// see man fma (https://linux.die.net/man/3/fma)
3716
+ #pragma CPROVER check push
3717
+ #pragma CPROVER check disable "div-by-zero"
3620
3718
if (isnan (x ) || isnan (y ))
3621
3719
return 0.0 / 0.0 ;
3622
3720
else if (
@@ -3637,6 +3735,7 @@ double fma(double x, double y, double z)
3637
3735
feraiseexcept (FE_INVALID );
3638
3736
return 0.0 / 0.0 ;
3639
3737
}
3738
+ #pragma CPROVER check pop
3640
3739
3641
3740
// TODO: detect overflow (FE_OVERFLOW), return +/- __builtin_inf()
3642
3741
// TODO: detect underflow (FE_UNDERFLOW), return +/- 0
@@ -3660,6 +3759,8 @@ float __builtin_inff(void);
3660
3759
float fmaf (float x , float y , float z )
3661
3760
{
3662
3761
// see man fma (https://linux.die.net/man/3/fma)
3762
+ #pragma CPROVER check push
3763
+ #pragma CPROVER check disable "div-by-zero"
3663
3764
if (isnanf (x ) || isnanf (y ))
3664
3765
return 0.0f / 0.0f ;
3665
3766
else if (
@@ -3680,6 +3781,7 @@ float fmaf(float x, float y, float z)
3680
3781
feraiseexcept (FE_INVALID );
3681
3782
return 0.0f / 0.0f ;
3682
3783
}
3784
+ #pragma CPROVER check pop
3683
3785
3684
3786
// TODO: detect overflow (FE_OVERFLOW), return +/- __builtin_inff()
3685
3787
// TODO: detect underflow (FE_UNDERFLOW), return +/- 0
@@ -3708,6 +3810,8 @@ long double __builtin_infl(void);
3708
3810
long double fmal (long double x , long double y , long double z )
3709
3811
{
3710
3812
// see man fma (https://linux.die.net/man/3/fma)
3813
+ #pragma CPROVER check push
3814
+ #pragma CPROVER check disable "div-by-zero"
3711
3815
if (isnanl (x ) || isnanl (y ))
3712
3816
return 0.0l / 0.0l ;
3713
3817
else if (
@@ -3728,6 +3832,7 @@ long double fmal(long double x, long double y, long double z)
3728
3832
feraiseexcept (FE_INVALID );
3729
3833
return 0.0l / 0.0l ;
3730
3834
}
3835
+ #pragma CPROVER check pop
3731
3836
3732
3837
#if LDBL_MAX_EXP == DBL_MAX_EXP
3733
3838
return fma (x , y , z );
0 commit comments