Clang++ のリーク サニタイザーは、単体テストの 1 つでメモリ リークがあると主張しています。私はそれを信じたいと思っていますが、調べても見つかりません。
次のオプションでコンパイルしています。
/usr/bin/clang++ -std=c++14 -g -Wall -Wextra -pedantic -O0 -fuse-ld=gold -fsanitize=address
次のような出力が得られます
=================================================================
==8611==ERROR: LeakSanitizer: detected memory leaks
Direct leak of 8 byte(s) in 1 object(s) allocated from:
#0 0x54a650 (~/tmp/tests/utest-...+0x54a650)
#1 0x61bfc9 (~/tmp/tests/utest-...+0x61bfc9)
#2 0x55242f (~/tmp/tests/utest-...+0x55242f)
#3 0x550a01 (~/tmp/tests/utest-...+0x550a01)
#4 0x54f928 (~/tmp/tests/utest-...+0x54f928)
#5 0x5706fa (~/tmp/tests/utest-...+0x5706fa)
#6 0x55b8d9 (~/tmp/tests/utest-...+0x55b8d9)
#7 0x5e0914 (~/tmp/tests/utest-...+0x5e0914)
#8 0x5deae8 (~/tmp/tests/utest-...+0x5deae8)
#9 0x5c8bde (~/tmp/tests/utest-...+0x5c8bde)
#10 0x5b23fa (~/tmp/tests/utest-...+0x5b23fa)
#11 0x5a1ee9 (~/tmp/tests/utest-...+0x5a1ee9)
#12 0x56dcdf (~/tmp/tests/utest-...+0x56dcdf)
#13 0x566d57 (~/tmp/tests/utest-...+0x566d57)
#14 0x7f9fb622e60f (/usr/lib/libc.so.6+0x2060f)
(重要でない情報は削除されています)。
上記の出力の問題は、何がリークされているかを把握できるように、ファイル番号と行番号ではなくメモリ アドレスを取得することです。
Google で有名な Clang の Chandler Carruth によると、デバッグ出力 ('-g') を有効にすると、スタック トレースのメモリ アドレスがファイル番号と行番号に置き換えられるはずです。(具体的には、彼がそれを適用しているのをここで見ることができます。) コンパイル フラグからわかるように、デバッグ情報を出力しています。
私が何を無視している可能性がありますか?