@@ -71,18 +71,16 @@ inline void abort(void)
7171#undef calloc
7272
7373__CPROVER_bool __VERIFIER_nondet___CPROVER_bool ();
74+ #ifndef __GNUC__
75+ _Bool __builtin_mul_overflow ();
76+ #endif
7477
7578inline void * calloc (__CPROVER_size_t nmemb , __CPROVER_size_t size )
7679{
7780__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 ))
8183 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
8684
8785 if (__CPROVER_malloc_failure_mode == __CPROVER_malloc_failure_mode_return_null )
8886 {
@@ -302,6 +300,11 @@ inline void free(void *ptr)
302300int isspace (int );
303301int isdigit (int );
304302
303+ #ifndef __GNUC__
304+ _Bool __builtin_add_overflow ();
305+ _Bool __builtin_mul_overflow ();
306+ #endif
307+
305308inline long strtol (const char * nptr , char * * endptr , int base )
306309{
307310 __CPROVER_HIDE :;
@@ -362,23 +365,15 @@ inline long strtol(const char *nptr, char **endptr, int base)
362365 break ;
363366
364367 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 ))
374370 {
375371 errno = ERANGE ;
376372 if (sign == '-' )
377373 return LONG_MIN ;
378374 else
379375 return LONG_MAX ;
380376 }
381- res += ch - sub ;
382377 }
383378
384379 if (endptr != 0 )
0 commit comments