/* Running count of suppressed errors detected. */
static UInt vg_n_errs_suppressed = 0;
+/* Used to disable further error reporting once some huge number of
+ errors have already been logged. */
+static Bool vg_ignore_errors = False;
+
/* forwards ... */
static Suppression* is_suppressible_error ( ErrContext* ec );
"Final error counts may be inaccurate. Go fix your program!");
VG_(message)(Vg_UserMsg, "");
stopping_message = True;
+ vg_ignore_errors = True;
}
return;
}
void VG_(record_value_error) ( Int size )
{
ErrContext ec;
+ if (vg_ignore_errors) return;
clear_ErrContext( &ec );
ec.count = 1;
ec.next = NULL;
void VG_(record_address_error) ( Addr a, Int size, Bool isWrite )
{
ErrContext ec;
+ if (vg_ignore_errors) return;
/* If this is caused by an access immediately below %ESP, and the
user asks nicely, we just ignore it. */
void VG_(record_free_error) ( ThreadState* tst, Addr a )
{
ErrContext ec;
+ if (vg_ignore_errors) return;
clear_ErrContext( &ec );
ec.count = 1;
ec.next = NULL;
void VG_(record_freemismatch_error) ( ThreadState* tst, Addr a )
{
ErrContext ec;
+ if (vg_ignore_errors) return;
clear_ErrContext( &ec );
ec.count = 1;
ec.next = NULL;
void VG_(record_jump_error) ( ThreadState* tst, Addr a )
{
ErrContext ec;
+ if (vg_ignore_errors) return;
clear_ErrContext( &ec );
ec.count = 1;
ec.next = NULL;
Char* msg )
{
ErrContext ec;
+ if (vg_ignore_errors) return;
clear_ErrContext( &ec );
ec.count = 1;
ec.next = NULL;
void VG_(record_user_err) ( ThreadState* tst, Addr a, Bool isWriteLack )
{
ErrContext ec;
+ if (vg_ignore_errors) return;
clear_ErrContext( &ec );
ec.count = 1;
ec.next = NULL;
/* Running count of suppressed errors detected. */
static UInt vg_n_errs_suppressed = 0;
+/* Used to disable further error reporting once some huge number of
+ errors have already been logged. */
+static Bool vg_ignore_errors = False;
+
/* forwards ... */
static Suppression* is_suppressible_error ( ErrContext* ec );
"Final error counts may be inaccurate. Go fix your program!");
VG_(message)(Vg_UserMsg, "");
stopping_message = True;
+ vg_ignore_errors = True;
}
return;
}
void VG_(record_value_error) ( Int size )
{
ErrContext ec;
+ if (vg_ignore_errors) return;
clear_ErrContext( &ec );
ec.count = 1;
ec.next = NULL;
void VG_(record_address_error) ( Addr a, Int size, Bool isWrite )
{
ErrContext ec;
+ if (vg_ignore_errors) return;
/* If this is caused by an access immediately below %ESP, and the
user asks nicely, we just ignore it. */
void VG_(record_free_error) ( ThreadState* tst, Addr a )
{
ErrContext ec;
+ if (vg_ignore_errors) return;
clear_ErrContext( &ec );
ec.count = 1;
ec.next = NULL;
void VG_(record_freemismatch_error) ( ThreadState* tst, Addr a )
{
ErrContext ec;
+ if (vg_ignore_errors) return;
clear_ErrContext( &ec );
ec.count = 1;
ec.next = NULL;
void VG_(record_jump_error) ( ThreadState* tst, Addr a )
{
ErrContext ec;
+ if (vg_ignore_errors) return;
clear_ErrContext( &ec );
ec.count = 1;
ec.next = NULL;
Char* msg )
{
ErrContext ec;
+ if (vg_ignore_errors) return;
clear_ErrContext( &ec );
ec.count = 1;
ec.next = NULL;
void VG_(record_user_err) ( ThreadState* tst, Addr a, Bool isWriteLack )
{
ErrContext ec;
+ if (vg_ignore_errors) return;
clear_ErrContext( &ec );
ec.count = 1;
ec.next = NULL;