From: Nicholas Nethercote Date: Sat, 13 Jan 2007 00:01:39 +0000 (+0000) Subject: Merge r6514 (nanoleak2.c) X-Git-Tag: svn/VALGRIND_3_2_2~12 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=b59babe97f13413e061fe4f7dc254e40b65bc09c;p=thirdparty%2Fvalgrind.git Merge r6514 (nanoleak2.c) git-svn-id: svn://svn.valgrind.org/valgrind/branches/VALGRIND_3_2_BRANCH@6515 --- diff --git a/coregrind/m_errormgr.c b/coregrind/m_errormgr.c index 02035ce7d7..4829f16834 100644 --- a/coregrind/m_errormgr.c +++ b/coregrind/m_errormgr.c @@ -456,6 +456,8 @@ void do_actions_on_error(Error* err, Bool allow_db_attach) just for pretty printing purposes. */ static Bool is_first_shown_context = True; +static Int n_errs_shown = 0; + /* Top-level entry point to the error management subsystem. All detected errors are notified here; this routine decides if/when the user should see the error. */ @@ -469,7 +471,6 @@ void VG_(maybe_record_error) ( ThreadId tid, VgRes exe_res = Vg_MedRes; static Bool stopping_message = False; static Bool slowdown_message = False; - static Int n_errs_shown = 0; /* After M_COLLECT_NO_ERRORS_AFTER_SHOWN different errors have been found, or M_COLLECT_NO_ERRORS_AFTER_FOUND total errors @@ -629,7 +630,8 @@ Bool VG_(unique_error) ( ThreadId tid, ErrorKind ekind, Addr a, Char* s, void* extra, ExeContext* where, Bool print_error, Bool allow_db_attach, Bool count_error ) { - Error err; + Error err; + Supp *su; /* Build ourselves the error */ construct_error ( &err, tid, ekind, a, s, extra, where ); @@ -643,7 +645,8 @@ Bool VG_(unique_error) ( ThreadId tid, ErrorKind ekind, Addr a, Char* s, not copying 'extra'. */ (void)VG_TDICT_CALL(tool_update_extra, &err); - if (NULL == is_suppressible_error(&err)) { + su = is_suppressible_error(&err); + if (NULL == su) { if (count_error) n_errs_found++; @@ -652,13 +655,14 @@ Bool VG_(unique_error) ( ThreadId tid, ErrorKind ekind, Addr a, Char* s, VG_(message)(Vg_UserMsg, ""); pp_Error(&err); is_first_shown_context = False; + n_errs_shown++; + do_actions_on_error(&err, allow_db_attach); } - do_actions_on_error(&err, allow_db_attach); - return False; } else { n_errs_suppressed++; + su->count++; return True; } } diff --git a/memcheck/tests/Makefile.am b/memcheck/tests/Makefile.am index 169c735125..c245c8cd18 100644 --- a/memcheck/tests/Makefile.am +++ b/memcheck/tests/Makefile.am @@ -75,6 +75,7 @@ EXTRA_DIST = $(noinst_SCRIPTS) \ mmaptest.stderr.exp mmaptest.vgtest \ nanoleak.stderr.exp nanoleak.vgtest \ nanoleak_supp.stderr.exp nanoleak_supp.vgtest nanoleak.supp \ + nanoleak2.stderr.exp nanoleak2.vgtest \ new_nothrow.stderr.exp new_nothrow.vgtest \ new_override.stderr.exp new_override.stdout.exp new_override.vgtest \ null_socket.stderr.exp null_socket.vgtest \ @@ -149,7 +150,7 @@ check_PROGRAMS = \ malloc_usable malloc1 malloc2 malloc3 manuel1 manuel2 manuel3 \ match-overrun \ memalign_test memalign2 memcmptest mempool mmaptest \ - nanoleak new_nothrow \ + nanoleak nanoleak2 new_nothrow \ null_socket oset_test overlap \ partiallydefinedeq \ partial_load pdb-realloc pdb-realloc2 \ diff --git a/memcheck/tests/nanoleak2.c b/memcheck/tests/nanoleak2.c new file mode 100644 index 0000000000..d4758df229 --- /dev/null +++ b/memcheck/tests/nanoleak2.c @@ -0,0 +1,19 @@ + +// Bruce Lowekamp reported that in a program with a +// reachable leak, if you do: +// +// valgrind --leak-check=yes --gen-suppressions=yes --show-reachable=no -q +// +// it gives the y/n/c suppression prompt for errors that aren't shown. This +// test checks that is fixed. + +#include + +int* a; + +int main ( void ) +{ + a = malloc(1000); // Becomes a reachable leak. + a[0] = 0; + return a[0]; +} diff --git a/memcheck/tests/nanoleak2.stderr.exp b/memcheck/tests/nanoleak2.stderr.exp new file mode 100644 index 0000000000..e69de29bb2 diff --git a/memcheck/tests/nanoleak2.vgtest b/memcheck/tests/nanoleak2.vgtest new file mode 100644 index 0000000000..de0e70c0ef --- /dev/null +++ b/memcheck/tests/nanoleak2.vgtest @@ -0,0 +1,2 @@ +vgopts: --leak-check=yes --gen-suppressions=yes --show-reachable=no -q +prog: nanoleak2