@@ -415,15 +415,13 @@ inline long atol(const char *nptr)
415
415
416
416
#undef getenv
417
417
418
- #ifndef __CPROVER_LIMITS_H_INCLUDED
419
- #include <limits .h>
420
- #define __CPROVER_LIMITS_H_INCLUDED
418
+ #ifndef __CPROVER_STDDEF_H_INCLUDED
419
+ # include <stddef .h>
420
+ # define __CPROVER_STDDEF_H_INCLUDED
421
421
#endif
422
422
423
423
__CPROVER_bool __VERIFIER_nondet___CPROVER_bool ();
424
- __CPROVER_size_t __VERIFIER_nondet___CPROVER_size_t ();
425
-
426
- inline void * __builtin_alloca (__CPROVER_size_t alloca_size );
424
+ ptrdiff_t __VERIFIER_nondet_ptrdiff_t ();
427
425
428
426
inline char * getenv (const char * name )
429
427
{
@@ -435,29 +433,35 @@ inline char *getenv(const char *name)
435
433
"zero-termination of argument of getenv" );
436
434
#endif
437
435
438
- #ifdef __CPROVER_CUSTOM_BITVECTOR_ANALYSIS
436
+ #ifdef __CPROVER_CUSTOM_BITVECTOR_ANALYSIS
439
437
__CPROVER_event ("invalidate_pointer" , "getenv_result" );
440
438
char * getenv_result ;
441
439
__CPROVER_set_must (getenv_result , "getenv_result" );
442
440
return getenv_result ;
443
441
444
- #else
442
+ #else
445
443
446
444
__CPROVER_bool found = __VERIFIER_nondet___CPROVER_bool ();
447
445
if (!found ) return 0 ;
448
446
449
- __CPROVER_size_t buf_size = __VERIFIER_nondet___CPROVER_size_t ();
447
+ ptrdiff_t buf_size = __VERIFIER_nondet_ptrdiff_t ();
450
448
451
449
// It's reasonable to assume this won't exceed the signed
452
450
// range in practice, but in principle, this could exceed
453
451
// the range.
454
452
455
- __CPROVER_assume (1 <= buf_size && buf_size <= SSIZE_MAX );
456
- char * buffer = (char * )__builtin_alloca (buf_size );
453
+ __CPROVER_assume (buf_size >= 1 );
454
+ char * buffer = (char * )__CPROVER_allocate (buf_size * sizeof ( char ), 0 );
457
455
buffer [buf_size - 1 ]= 0 ;
458
456
457
+ # ifdef __CPROVER_STRING_ABSTRACTION
458
+ __CPROVER_assume (__CPROVER_buffer_size (buffer ) == buf_size );
459
+ __CPROVER_is_zero_string (buffer ) = 1 ;
460
+ __CPROVER_zero_string_length (buffer ) = buf_size - 1 ;
461
+ # endif
462
+
459
463
return buffer ;
460
- #endif
464
+ #endif
461
465
}
462
466
463
467
/* FUNCTION: realloc */
0 commit comments