From 4cae62d8285525b2f6e33e0156ab860b4ae60ae0 Mon Sep 17 00:00:00 2001 From: Nicholas Nethercote Date: Thu, 6 Apr 2006 14:21:42 +0000 Subject: [PATCH] Commit a patch from Olly Betts which avoids a possible problem with COUNT_LEAKS on 64-bit machines. git-svn-id: svn://svn.valgrind.org/valgrind/trunk@5832 --- memcheck/memcheck.h | 22 +++++++++++++++++----- 1 file changed, 17 insertions(+), 5 deletions(-) diff --git a/memcheck/memcheck.h b/memcheck/memcheck.h index 2338fcf2a8..0ffc8e1c80 100644 --- a/memcheck/memcheck.h +++ b/memcheck/memcheck.h @@ -245,13 +245,25 @@ typedef } /* Return number of leaked, dubious, reachable and suppressed bytes found by - all previous leak checks. They must be lvalues. */ + all previous leak checks. They must be lvalues. */ #define VALGRIND_COUNT_LEAKS(leaked, dubious, reachable, suppressed) \ - {unsigned int _qzz_res; \ + /* For safety on 64-bit platforms we assign the results to private + unsigned long variables, then assign these to the lvalues the user + specified, which works no matter what type 'leaked', 'dubious', etc + are. We also initialise '_qzz_leaked', etc because + VG_USERREQ__COUNT_LEAKS doesn't mark the values returned as + initialised. */ \ + {unsigned int _qzz_res; \ + unsigned long _qzz_leaked = 0, _qzz_dubious = 0; \ + unsigned long _qzz_reachable = 0, _qzz_suppressed = 0; \ VALGRIND_DO_CLIENT_REQUEST(_qzz_res, 0, \ - VG_USERREQ__COUNT_LEAKS, \ - &leaked, &dubious, &reachable, &suppressed, \ - 0); \ + VG_USERREQ__COUNT_LEAKS, \ + &_qzz_leaked, &_qzz_dubious, \ + &_qzz_reachable, &_qzz_suppressed, 0); \ + leaked = _qzz_leaked; \ + dubious = _qzz_dubious; \ + reachable = _qzz_reachable; \ + suppressed = _qzz_suppressed; \ } -- 2.47.2