cszide via llvm-dev
2019-Jan-26 08:51 UTC
[llvm-dev] Assertion `LICM.getLoopToAliasSetMap().empty() && "Didn't free loop alias sets"' failed.
Hi everyone, Recently, I made some tests for LLVM/Clang/opt, and I found many test cases that can cause a crash bug for opt with "...-loop-unroll -licm...". For the truck version of LLVM, the output is "llvm/lib/Transforms/Scalar/LICM.cpp:222: virtual bool {anonymous}::LegacyLICMPass::doFinalization(): Assertion `LICM.getLoopToAliasSetMap().empty() && "Didn't free loop alias sets"' failed." For example, when compiling the following source code with the pass sequence "-loop-rotate -gvn -prune-eh -loop-unroll -licm", the bug can be triggered. --------------------------------------------------- #include "csmith.h" g, h; int16_t a(); b() { a(); for (;;) { uint64_t c; int d, e, f; for (d = 0; d < 4; d++) for (; e < f;) c; } } int16_t a() { for (; 0;) for (; 0;) for (; 0;) ; g = 0; for (; g < 5; g++) for (; h;) ; } $clang -O3 -c -emit-llvm -mllvm -disable-llvm-optzns small1.c -o small1.bc $opt -loop-rotate -gvn -prune-eh -loop-unroll -licm small1.bc -o small1-opt.bc ---------------------------------------------------- My question is that why the information in LoopToAliasSetMap must be freed before the doFinalization() function. When the program runs into the doFinalization() function, the information in LoopToAliasSetMap is no longer useful, so can we free these elements in LoopToAliasSetMap manually? Like this: bool doFinalization() override { //assert(LICM.getLoopToAliasSetMap().empty() && //"Didn't free loop alias sets"); for (auto <AS : LICM.getLoopToAliasSetMap()) delete LTAS.second; LICM.getLoopToAliasSetMap().clear(); return false; } I test it on my system and it works, but I do not know whether there are some side-effects. -------------- next part -------------- An HTML attachment was scrubbed... URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20190126/e3029d5f/attachment.html> -------------- next part -------------- A non-text attachment was scrubbed... Name: small1.bc Type: application/octet-stream Size: 2764 bytes Desc: not available URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20190126/e3029d5f/attachment.obj>