@@ -71,18 +71,16 @@ inline void abort(void)
71
71
#undef calloc
72
72
73
73
__CPROVER_bool __VERIFIER_nondet___CPROVER_bool ();
74
+ #ifndef __GNUC__
75
+ _Bool __builtin_mul_overflow ();
76
+ #endif
74
77
75
78
inline void * calloc (__CPROVER_size_t nmemb , __CPROVER_size_t size )
76
79
{
77
80
__CPROVER_HIDE :;
78
- #pragma CPROVER check push
79
- #pragma CPROVER check disable "unsigned-overflow"
80
- if (__CPROVER_overflow_mult (nmemb , size ))
81
+ __CPROVER_size_t alloc_size ;
82
+ if (__builtin_mul_overflow (nmemb , size , & alloc_size ))
81
83
return (void * )0 ;
82
- // This is now safe; still do it within the scope of the pragma to avoid an
83
- // unnecessary assertion to be generated.
84
- __CPROVER_size_t alloc_size = nmemb * size ;
85
- #pragma CPROVER check pop
86
84
87
85
if (__CPROVER_malloc_failure_mode == __CPROVER_malloc_failure_mode_return_null )
88
86
{
@@ -302,6 +300,11 @@ inline void free(void *ptr)
302
300
int isspace (int );
303
301
int isdigit (int );
304
302
303
+ #ifndef __GNUC__
304
+ _Bool __builtin_add_overflow ();
305
+ _Bool __builtin_mul_overflow ();
306
+ #endif
307
+
305
308
inline long strtol (const char * nptr , char * * endptr , int base )
306
309
{
307
310
__CPROVER_HIDE :;
@@ -362,23 +365,15 @@ inline long strtol(const char *nptr, char **endptr, int base)
362
365
break ;
363
366
364
367
in_number = 1 ;
365
- _Bool overflow = __CPROVER_overflow_mult (res , (long )base );
366
- #pragma CPROVER check push
367
- #pragma CPROVER check disable "signed-overflow"
368
- // This is now safe; still do it within the scope of the pragma to avoid an
369
- // unnecessary assertion to be generated.
370
- if (!overflow )
371
- res *= base ;
372
- #pragma CPROVER check pop
373
- if (overflow || __CPROVER_overflow_plus (res , (long )(ch - sub )))
368
+ _Bool overflow = __builtin_mul_overflow (res , (long )base , & res );
369
+ if (overflow || __builtin_add_overflow (res , (long )(ch - sub ), & res ))
374
370
{
375
371
errno = ERANGE ;
376
372
if (sign == '-' )
377
373
return LONG_MIN ;
378
374
else
379
375
return LONG_MAX ;
380
376
}
381
- res += ch - sub ;
382
377
}
383
378
384
379
if (endptr != 0 )
0 commit comments