From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mx2.suse.de (mx2.suse.de [195.135.220.15]) by sourceware.org (Postfix) with ESMTPS id D89C63851C00 for ; Thu, 23 Apr 2020 12:43:09 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.3.2 sourceware.org D89C63851C00 Authentication-Results: sourceware.org; dmarc=none (p=none dis=none) header.from=suse.de Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=tdevries@suse.de X-Virus-Scanned: by amavisd-new at test-mx.suse.de Received: from relay2.suse.de (unknown [195.135.220.254]) by mx2.suse.de (Postfix) with ESMTP id 51EA3ABAD; Thu, 23 Apr 2020 12:43:08 +0000 (UTC) Subject: Re: [PATCH] Fix Ada crash with .debug_names To: Tom Tromey , gdb-patches@sourceware.org References: <20200421152335.21282-1-tromey@adacore.com> From: Tom de Vries Autocrypt: addr=tdevries@suse.de; keydata= xsBNBF0ltCcBCADDhsUnMMdEXiHFfqJdXeRvgqSEUxLCy/pHek88ALuFnPTICTwkf4g7uSR7 HvOFUoUyu8oP5mNb4VZHy3Xy8KRZGaQuaOHNhZAT1xaVo6kxjswUi3vYgGJhFMiLuIHdApoc u5f7UbV+egYVxmkvVLSqsVD4pUgHeSoAcIlm3blZ1sDKviJCwaHxDQkVmSsGXImaAU+ViJ5l CwkvyiiIifWD2SoOuFexZyZ7RUddLosgsO0npVUYbl6dEMq2a5ijGF6/rBs1m3nAoIgpXk6P TCKlSWVW6OCneTaKM5C387972qREtiArTakRQIpvDJuiR2soGfdeJ6igGA1FZjU+IsM5ABEB AAHNH1RvbSBkZSBWcmllcyA8dGRldnJpZXNAc3VzZS5kZT7CwKsEEwEIAD4WIQSsnSe5hKbL MK1mGmjuhV2rbOJEoAUCXSW0JwIbAwUJA8JnAAULCQgHAgYVCgkICwIEFgIDAQIeAQIXgAAh CRDuhV2rbOJEoBYhBKydJ7mEpsswrWYaaO6FXats4kSgc48H/Ra2lq5p3dHsrlQLqM7N68Fo eRDf3PMevXyMlrCYDGLVncQwMw3O/AkousktXKQ42DPJh65zoXB22yUt8m0g12xkLax98KFJ 5NyUloa6HflLl+wQL/uZjIdNUQaHQLw3HKwRMVi4l0/Jh/TygYG1Dtm8I4o708JS4y8GQxoQ UL0z1OM9hyM3gI2WVTTyprsBHy2EjMOu/2Xpod95pF8f90zBLajy6qXEnxlcsqreMaqmkzKn 3KTZpWRxNAS/IH3FbGQ+3RpWkNGSJpwfEMVCeyK5a1n7yt1podd1ajY5mA1jcaUmGppqx827 8TqyteNe1B/pbiUt2L/WhnTgW1NC1QDOwE0EXSW0JwEIAM99H34Bu4MKM7HDJVt864MXbx7B 1M93wVlpJ7Uq+XDFD0A0hIal028j+h6jA6bhzWto4RUfDl/9mn1StngNVFovvwtfzbamp6+W pKHZm9X5YvlIwCx131kTxCNDcF+/adRW4n8CU3pZWYmNVqhMUiPLxElA6QhXTtVBh1RkjCZQ Kmbd1szvcOfaD8s+tJABJzNZsmO2hVuFwkDrRN8Jgrh92a+yHQPd9+RybW2l7sJv26nkUH5Z 5s84P6894ebgimcprJdAkjJTgprl1nhgvptU5M9Uv85Pferoh2groQEAtRPlCGrZ2/2qVNe9 XJfSYbiyedvApWcJs5DOByTaKkcAEQEAAcLAkwQYAQgAJhYhBKydJ7mEpsswrWYaaO6FXats 4kSgBQJdJbQnAhsMBQkDwmcAACEJEO6FXats4kSgFiEErJ0nuYSmyzCtZhpo7oVdq2ziRKD3 twf7BAQBZ8TqR812zKAD7biOnWIJ0McV72PFBxmLIHp24UVe0ZogtYMxSWKLg3csh0yLVwc7 H3vldzJ9AoK3Qxp0Q6K/rDOeUy3HMqewQGcqrsRRh0NXDIQk5CgSrZslPe47qIbe3O7ik/MC q31FNIAQJPmKXX25B115MMzkSKlv4udfx7KdyxHrTSkwWZArLQiEZj5KG4cCKhIoMygPTA3U yGaIvI/BGOtHZ7bEBVUCFDFfOWJ26IOCoPnSVUvKPEOH9dv+sNy7jyBsP5QxeTqwxC/1ZtNS DUCSFQjqA6bEGwM22dP8OUY6SC94x1G81A9/xbtm9LQxKm0EiDH8KBMLfQ== Message-ID: <33a3c626-75f9-326e-55d9-b379635dd8bd@suse.de> Date: Thu, 23 Apr 2020 14:43:06 +0200 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101 Thunderbird/68.5.0 MIME-Version: 1.0 In-Reply-To: <20200421152335.21282-1-tromey@adacore.com> Content-Type: text/plain; charset=utf-8 Content-Language: en-US Content-Transfer-Encoding: 7bit X-Spam-Status: No, score=-16.6 required=5.0 tests=BAYES_00, KAM_DMARC_STATUS, RCVD_IN_MSPIKE_H3, RCVD_IN_MSPIKE_WL, SPF_HELO_NONE, SPF_PASS, TXREP autolearn=ham autolearn_force=no version=3.4.2 X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on server2.sourceware.org X-BeenThere: gdb-patches@sourceware.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Gdb-patches mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 23 Apr 2020 12:43:11 -0000 On 21-04-2020 17:23, Tom Tromey wrote: > PR ada/25837 points out a crash in the gdb testsuite when .debug_names > is used. You can reproduce like: > > runtest --target_board=cc-with-debug-names \ > gdb.ada/big_packed_array.exp > > The bug was introduced by commit e0802d599 ("Avoid copying in > lookup_name_info"). The problem is that the return type of > language_lookup_name changed, but in a way that didn't cause existing > callers to trigger a compilation error. So, the matcher cache in > dw2_expand_symtabs_matching_symbol, which stored a "const string &", > would end up with invalid data. > Hi, it took me a while to realize that the problem is that the changed return type of language_lookup_name caused a std::string copy constructor to be invoked here: ... name_and_matcher key { name_matcher, lookup_name_without_params.language_lookup_name (lang_e) }; ... creating a temporary that has the lifetime of the loop body, in other words, it'll be destroyed at the end of the loop body scope, while still being referenced after the loop from the std::vector where we store "key". Perhaps the log message could be extended to clarify that bit. Otherwise, I've tested this with target board cc-with-debug-names, and did not spot any new FAILs. Thanks, - Tom --- $ cat test.c #include #include #include #include struct name_and_matcher { #if FIX const char *name; #else const std::string &name; #endif bool operator== (const name_and_matcher &other) const { bool res; #if FIX res = strcmp (name, other.name) == 0; #else res = name == other.name; #endif return res; } }; int main (void) { std::vector matchers; const char *str[] = { "itsy", "bitsy", "spider" }; int i; for (i = 0; i < 3; ++i) { name_and_matcher key { str[i] }; matchers.push_back (std::move (key)); } for(std::vector::iterator it = matchers.begin (); it != matchers.end(); ++it) std::cout << it->name << "\n"; return 0; } --- $ g++ test.c -O0 -DFIX=0 $ ./a.out spider spider spider --- $ g++ test.c -O0 -DFIX=1 itsy bitsy spider