From: Paul Floyd Date: Fri, 12 Nov 2021 22:44:54 +0000 (+0100) Subject: Make memcheck tests demangle and demangle-rust clang-friendly. X-Git-Tag: VALGRIND_3_19_0~89 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=c09706352adcfc66e9c7c598e45830a609223346;p=thirdparty%2Fvalgrind.git Make memcheck tests demangle and demangle-rust clang-friendly. Clang uses CMOV for ternary operators which does not immediately trigger an error. Using double free and new/free mismatch still poses no problem with clang but still uses the demangling. Also update .gitignore --- diff --git a/.gitignore b/.gitignore index 6a94e6c82d..770d08c278 100644 --- a/.gitignore +++ b/.gitignore @@ -843,6 +843,7 @@ /memcheck/tests/deep-backtrace /memcheck/tests/deep_templates /memcheck/tests/demangle +/memcheck/tests/demangle-rust /memcheck/tests/describe-block /memcheck/tests/descr_belowsp /memcheck/tests/dir diff --git a/memcheck/tests/demangle-rust.c b/memcheck/tests/demangle-rust.c index f2a458b2ac..f5805ff42b 100644 --- a/memcheck/tests/demangle-rust.c +++ b/memcheck/tests/demangle-rust.c @@ -9,7 +9,9 @@ // A v0 symbol that demangles to: ::fold_with:: int _RINvYNtNtCs4uGc65yWeeX_12rustc_middle2ty13PredicateKindNtNtB5_4fold12TypeFoldable9fold_withNtNtNtCsgI90OQiJWEs_11rustc_infer5infer7resolve24OpportunisticVarResolverECsdozMG8X9FIu_21rustc_trait_selection(int *p) { - return *p ? 1 : 2; + free(p); + free(p); + return 1; } // A v0 symbol that demangles to: rustc_expand::mbe::macro_parser::parse_tt diff --git a/memcheck/tests/demangle-rust.stderr.exp b/memcheck/tests/demangle-rust.stderr.exp index f04bb625b1..6579f08426 100644 --- a/memcheck/tests/demangle-rust.stderr.exp +++ b/memcheck/tests/demangle-rust.stderr.exp @@ -1,6 +1,16 @@ -Conditional jump or move depends on uninitialised value(s) - at 0x........: ::fold_with:: (demangle-rust.c:12) - by 0x........: rustc_expand::mbe::macro_parser::parse_tt (demangle-rust.c:18) - by 0x........: core::str::lossy::Utf8Lossy::from_bytes (demangle-rust.c:24) - by 0x........: main (demangle-rust.c:29) +Invalid free() / delete / delete[] / realloc() + at 0x........: free (vg_replace_malloc.c:...) + by 0x........: ::fold_with:: (demangle-rust.c:13) + by 0x........: rustc_expand::mbe::macro_parser::parse_tt (demangle-rust.c:20) + by 0x........: core::str::lossy::Utf8Lossy::from_bytes (demangle-rust.c:26) + by 0x........: main (demangle-rust.c:31) + Address 0x........ is 0 bytes inside a block of size 4 free'd + at 0x........: free (vg_replace_malloc.c:...) + by 0x........: ::fold_with:: (demangle-rust.c:12) + by 0x........: rustc_expand::mbe::macro_parser::parse_tt (demangle-rust.c:20) + by 0x........: core::str::lossy::Utf8Lossy::from_bytes (demangle-rust.c:26) + by 0x........: main (demangle-rust.c:31) + Block was alloc'd at + at 0x........: malloc (vg_replace_malloc.c:...) + by 0x........: main (demangle-rust.c:31) diff --git a/memcheck/tests/demangle.cpp b/memcheck/tests/demangle.cpp index ff15fe12c3..9922bf405f 100644 --- a/memcheck/tests/demangle.cpp +++ b/memcheck/tests/demangle.cpp @@ -1,4 +1,5 @@ // Simple smoke test to see that the demangler is actually working +#include namespace abc { template @@ -6,7 +7,8 @@ class def { public: T1 xyzzy(T1 *p, T2 *) { - return *p ? 10 : 20; + free(p); + return 10; } }; }; diff --git a/memcheck/tests/demangle.stderr.exp b/memcheck/tests/demangle.stderr.exp index 6e7467d7cf..4a4dc87d7f 100644 --- a/memcheck/tests/demangle.stderr.exp +++ b/memcheck/tests/demangle.stderr.exp @@ -1,5 +1,9 @@ -Conditional jump or move depends on uninitialised value(s) - at 0x........: abc::def >::xyzzy(int*, magic*) (demangle.cpp:9) - by 0x........: magic::xyzzy(int*) (demangle.cpp:19) - by 0x........: main (demangle.cpp:27) +Mismatched free() / delete / delete [] + at 0x........: free (vg_replace_malloc.c:...) + by 0x........: abc::def >::xyzzy(int*, magic*) (demangle.cpp:10) + by 0x........: magic::xyzzy(int*) (demangle.cpp:21) + by 0x........: main (demangle.cpp:29) + Address 0x........ is 0 bytes inside a block of size 4 alloc'd + at 0x........: ...operator new... (vg_replace_malloc.c:...) + by 0x........: main (demangle.cpp:29)