diff --git a/memcheck/tests/leak_cpp_interior.cpp b/memcheck/tests/leak_cpp_interior.cpp index e38040330..ac1850a23 100644 --- a/memcheck/tests/leak_cpp_interior.cpp +++ b/memcheck/tests/leak_cpp_interior.cpp @@ -65,21 +65,37 @@ struct C : public A, public B } }; +std::string str; +std::string str2; +MyClass *ptr; +MyClass *ptr2; +Be *ptrBCe; +Ae *ptrACe; +B *ptrBC; +A *ptrAC; + + +void doit(void) +{ + str = "Valgrind"; // interior ptr. + str2 = str; + ptr = new MyClass[3]; // interior ptr. + ptr2 = new MyClass[0]; // "interior but exterior ptr". + // ptr2 points after the chunk, is wrongly considered by memcheck as definitely leaked. + + ptrBCe = new Ce; // interior ptr. + ptrACe = new Ce; // not an interior pointer. + ptrBC = new C; // interior ptr. + ptrAC = new C; // not an interior pointer. + + + str2 += " rocks (str2)\n"; // interior ptr. +} + + int main() { - std::string str = "Valgrind"; // interior ptr. - std::string str2 = str; - MyClass *ptr = new MyClass[3]; // interior ptr. - MyClass *ptr2 = new MyClass[0]; // "interior but exterior ptr". - // ptr2 points after the chunk, is wrongly considered by memcheck as definitely leaked. - - Be *ptrBCe = new Ce; // interior ptr. - Ae *ptrACe = new Ce; // not an interior pointer. - B *ptrBC = new C; // interior ptr. - A *ptrAC = new C; // not an interior pointer. - - - str2 += " rocks (str2)\n"; // interior ptr. + doit(); VALGRIND_MONITOR_COMMAND("v.set log_output"); fprintf(stderr, "VALGRIND_DO_LEAK_CHECK\n"); diff --git a/memcheck/tests/leak_cpp_interior.stderr.exp b/memcheck/tests/leak_cpp_interior.stderr.exp index bbecf9871..769c00e8d 100644 --- a/memcheck/tests/leak_cpp_interior.stderr.exp +++ b/memcheck/tests/leak_cpp_interior.stderr.exp @@ -2,7 +2,8 @@ valgrind output will go to log VALGRIND_DO_LEAK_CHECK 4 bytes in 1 blocks are definitely lost in loss record ... of ... - by 0x........: main (leak_cpp_interior.cpp:72) + by 0x........: doit() (leak_cpp_interior.cpp:83) + by 0x........: main (leak_cpp_interior.cpp:98) LEAK SUMMARY: definitely lost: 4 bytes in 1 blocks diff --git a/memcheck/tests/leak_cpp_interior.stderr.exp-64bit b/memcheck/tests/leak_cpp_interior.stderr.exp-64bit index 72348739c..49b2dedd3 100644 --- a/memcheck/tests/leak_cpp_interior.stderr.exp-64bit +++ b/memcheck/tests/leak_cpp_interior.stderr.exp-64bit @@ -2,7 +2,8 @@ valgrind output will go to log VALGRIND_DO_LEAK_CHECK 8 bytes in 1 blocks are definitely lost in loss record ... of ... - by 0x........: main (leak_cpp_interior.cpp:72) + by 0x........: doit() (leak_cpp_interior.cpp:83) + by 0x........: main (leak_cpp_interior.cpp:98) LEAK SUMMARY: definitely lost: 8 bytes in 1 blocks