Good day, So I have been spending some time to try to put salmon back in working shape. The code currently available in Salsa[1] builds through, but fails it's test suite. Said test is fortunately straightforward to run, and from further analysis with the debugger and test rebuilds with the pristine upstream source code, I believe I isolated that the root cause of the test failure is that salmon crashes with a segmentation fault when built against libcereal 1.3.2, while it works properly when built against libcereal 1.3.0, which is the version vendored by upstream if a local copy is not available.
[1]: https://salsa.debian.org/med-team/salmon I'm afraid I don't know in which component lies the bug actually. The function which triggers the segmentation fault is from rapidjson, maybe an argument wrongly passed: (gdb) run Starting program: /usr/bin/salmon index -t transcripts.fasta -i sample_salmon_quasi_index [Thread debugging using libthread_db enabled] Using host libthread_db library "/lib/x86_64-linux-gnu/libthread_db.so.1". [2022-11-05 17:13:09.632] [jLog] [warning] The salmon index is being built without any decoy sequences. It is recommended that decoy sequence (either computed auxiliary decoy sequence or the genome of the organism) be provided during indexing. Further details can be found at https://salmon.readthedocs.io/en/latest/salmon.html#preparing-transcriptome-indices-mapping-based-mode. [2022-11-05 17:13:09.633] [jLog] [info] building index out : sample_salmon_quasi_index [2022-11-05 17:13:09.633] [puff::index::jointLog] [info] Running fixFasta [New Thread 0x7ffff57ff6c0 (LWP 1095963)] [Step 1 of 4] : counting k-mers [Thread 0x7ffff57ff6c0 (LWP 1095963) exited] [2022-11-05 17:13:09.641] [puff::index::jointLog] [info] Replaced 0 non-ATCG nucleotides [2022-11-05 17:13:09.641] [puff::index::jointLog] [info] Clipped poly-A tails from 0 transcripts wrote 15 cleaned references Thread 1 "salmon" received signal SIGSEGV, Segmentation fault. rapidjson::PrettyWriter<rapidjson::BasicOStreamWrapper<std::ostream>, rapidjson::UTF8<char>, rapidjson::UTF8<char>, rapidjson::CrtAllocator, 2u>::StartObject (this=0x7fffffff8498) at /usr/include/rapidjson/prettywriter.h:113 113 new (Base::level_stack_.template Push<typename Base::Level>()) typename Base::Level(false); (gdb) bt #0 rapidjson::PrettyWriter<rapidjson::BasicOStreamWrapper<std::ostream>, rapidjson::UTF8<char>, rapidjson::UTF8<char>, rapidjson::CrtAllocator, 2u>::StartObject (this=0x7fffffff8498) at /usr/include/rapidjson/prettywriter.h:113 #1 cereal::JSONOutputArchive::writeName (this=0x7fffffff8360) at /usr/include/cereal/archives/json.hpp:347 #2 0x0000555555b030c8 in cereal::prologue<bool, (cereal::traits::detail::sfinae)0> (ar=...) at ./external/pufferfish/include/cereal/archives/json.hpp:891 #3 cereal::OutputArchive<cereal::JSONOutputArchive, 0u>::process<bool&> ( head=@0x7fffffff8085: false, this=0x7fffffff8360) at ./external/pufferfish/include/cereal/cereal.hpp:416 #4 cereal::OutputArchive<cereal::JSONOutputArchive, 0u>::operator()<bool&> ( this=<optimized out>) at ./external/pufferfish/include/cereal/cereal.hpp:311 #5 cereal::save<bool&> (t=..., ar=...) at ./external/pufferfish/include/cereal/archives/json.hpp:944 #6 cereal::OutputArchive<cereal::JSONOutputArchive, 0u>::processImpl<cereal::NameValuePair<bool&>, (cereal::traits::detail::sfinae)0> (t=..., this=<optimized out>) at ./external/pufferfish/include/cereal/cereal.hpp:505 #7 cereal::OutputArchive<cereal::JSONOutputArchive, 0u>::process<cereal::NameValuePair<bool&> > (head=..., this=<optimized out>) at ./external/pufferfish/include/cereal/cereal.hpp:417 #8 cereal::OutputArchive<cereal::JSONOutputArchive, 0u>::operator()<cereal::NameValuePair<bool&> > (this=0x7fffffff8360) at ./external/pufferfish/include/cereal/cereal.hpp:311 #9 fixFasta (parser=0x7ffff6094800, decoyNames=..., keepDuplicates=false, k=31, sepStr=" \t", expect_transcriptome=true, noclip_polya=false, iomutex=..., log=std::shared_ptr<spdlog::logger> (use count 4, weak count 0) = {...}, outFile="sample_salmon_quasi_index/ref_k31_fixed.fa", refIdExtensions=std::vector of length 15, capacity 15 = {...}, shortRefs=std::vector of length 0, capacity 0) at ./external/pufferfish/src/FixFasta.cpp:456 #10 0x0000555555b06e35 in fixFastaMain ( args=std::vector of length 7, capacity 8 = {...}, refIdExtension=std::vector of length 15, capacity 15 = {...}, shortRefs=std::vector of length 0, capacity 0, log=std::shared_ptr<spdlog::logger> (use count 4, weak count 0) = {...}, hasFeatures=hasFeatures@entry=false) at ./external/pufferfish/src/FixFasta.cpp:686 #11 0x0000555555a891b0 in pufferfishIndex (indexOpts=...) at ./external/pufferfish/src/PufferfishIndexer.cpp:432 #12 0x0000555555663a7e in SalmonIndex::buildPuffIndex_ (idxOpt=..., indexDir=..., this=0x7ffff603f280) at ./include/SalmonIndex.hpp:111 #13 SalmonIndex::build (idxOpt=..., indexDir=..., this=0x7ffff603f280) at ./include/SalmonIndex.hpp:76 #14 salmonIndex (argc=<optimized out>, argv=<optimized out>) at ./src/BuildSalmonIndex.cpp:247 #15 0x00005555555fe9e0 in std::function<int (int, char const**, std::unique_ptr<SalmonIndex, std::default_delete<SalmonIndex> >&)>::operator()(int, char const**, std::unique_ptr<SalmonIndex, std::default_delete<SalmonIndex> >&) const ( --Type <RET> for more, q to quit, c to continue without paging-- __args#2=std::unique_ptr<SalmonIndex> = {...}, __args#1=<optimized out>, __args#0=<optimized out>, this=0x7ffff604f158) at /usr/include/c++/12/bits/std_function.h:591 #16 main (argc=<optimized out>, argv=0x7fffffffe1c8) at ./src/Salmon.cpp:267 For information, -- Étienne Mollier <emoll...@emlwks999.eu> Fingerprint: 8f91 b227 c7d6 f2b1 948c 8236 793c f67e 8f0d 11da Sent from /dev/tty1, please excuse my verbosity.
signature.asc
Description: PGP signature