Subject: Profiles don't survive roundtrips via files

From: Paul Pogonyshev <[email-masked]>
Date: Thu, 16 Dec 2021 19:11:03 +0100

Emacs 27.2, pretty sure it has existed since forever and still exists.

To reproduce:

M-x profiler-start RET RET
<do whatever for a few seconds>
M-x profiler-stop RET
M-x profiler-report RET

After expanding a few nodes under `command-execute' you should come to
something like `#<subr call-interactively>'.

Now continue:

M-: (profiler-write-profile (profiler-cpu-profile) "/tmp/buggy-elisp.prof")
RET
M-: (profiler-report-profile (profiler-read-profile
"/tmp/buggy-elisp.prof")) RET

Expand the same nodes and observe that nodes with `#<whatever>' under them
no longer match, after file-roundtrip these `#<...>' multiply like crazy.
It seems what's going on is that these things get stored as strings in the
file, and after rereading them into memory, they no longer compare as equal
by profiler calltree-building code.

Paul