X Tutup
Skip to content

Add Valgrind CI action#2921

Merged
amai2012 merged 34 commits intodanmar:mainfrom
amai2012:valgrind
Dec 7, 2020
Merged

Add Valgrind CI action#2921
amai2012 merged 34 commits intodanmar:mainfrom
amai2012:valgrind

Conversation

@amai2012
Copy link
Copy Markdown
Collaborator

Add valgrind CI action.
Inspired by #2920

@amai2012 amai2012 changed the title Valgrind Add Valgrind CI action Nov 25, 2020

- name: Run valgrind
run: |
valgrind ./testrunner
Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

You need to pass --error-exitcode=1 so it will actually fail on any finding.

I also suggest adding the following options for better and more complete reporting --error-limit=no --leak-check=full --num-callers=50 --show-reachable=yes --track-fds=yes --track-origins=yes.

Copy link
Copy Markdown
Collaborator Author

@amai2012 amai2012 Nov 25, 2020

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@firewave Yes, but then all CI build would suddenly break which is not desired IMHO.
We should fix those issues (outside this PR) and afterwards enable the check.

Thanks for the suggested command line flags!

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Fine with me. We should hurry though so we don't introduce even more while we are waiting :D

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We could also reduce the runtime by using -O1. That's what usually is suggested and won't mess too much with the stack traces in case of an error.

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Unfortunately that produces code which valgrind cannot handle

vex amd64->IR: unhandled instruction bytes: 0x62 0xF1 0x5D 0x48 0xEF 0xE4 0xC5 0xFB 0x11 0xA5
vex amd64->IR:   REX=0 REX.W=0 REX.R=0 REX.X=0 REX.B=0
vex amd64->IR:   VEX=0 VEX.L=0 VEX.nVVVV=0x0 ESC=NONE
vex amd64->IR:   PFX.66=0 PFX.F2=0 PFX.F3=0
==7492== valgrind: Unrecognised instruction at address 0x7995ee.

The version is pretty old though so this might be expected. Will check with the latest version and open a ticket upstream if this persists.

So back to -Og...

@firewave
Copy link
Copy Markdown
Collaborator

firewave commented Nov 25, 2020

TestAutoVariables::testautovar14
==7273== Invalid read of size 4
==7273==    at 0xB9C836: ValueFlow::Value::equalValue(ValueFlow::Value const&) const (valueflow.h:90)
==7273==    by 0xEAD828: ValueFlow::Value::operator==(ValueFlow::Value const&) const (valueflow.h:147)
==7273==    by 0xEAEC8F: std::__debug::list<ValueFlow::Value, std::allocator<ValueFlow::Value> >::remove(ValueFlow::Value const&) (list:649)
==7273==    by 0xEA9821: removeContradiction(std::__debug::list<ValueFlow::Value, std::allocator<ValueFlow::Value> >&) (token.cpp:1927)
==7273==    by 0xEA9B59: removeContradictions(std::__debug::list<ValueFlow::Value, std::allocator<ValueFlow::Value> >&) (token.cpp:1970)
==7273==    by 0xEAA223: Token::addValue(ValueFlow::Value const&) (token.cpp:2061)
==7273==    by 0xF3D1AA: setTokenValue(Token*, ValueFlow::Value const&, Settings const*) (valueflow.cpp:342)
==7273==    by 0xF3F1FC: setTokenValue(Token*, ValueFlow::Value const&, Settings const*) (valueflow.cpp:636)
==7273==    by 0xF6C7FC: ValueFlowAnalyzer::update(Token*, Analyzer::Action, Analyzer::Direction) (valueflow.cpp:2240)
==7273==    by 0xD998D4: ForwardTraversal::update(Token*) (forwardanalyzer.cpp:131)
==7273==    by 0xD99AC1: ForwardTraversal::updateRecursive(Token*)::{lambda(Token*)#1}::operator()(Token*) const (forwardanalyzer.cpp:152)
==7273==    by 0xD9E148: std::_Function_handler<ForwardTraversal::Progress (Token*), ForwardTraversal::updateRecursive(Token*)::{lambda(Token*)#1}>::_M_invoke(std::_Any_data const&, Token*&&) (std_function.h:302)
==7273==  Address 0x89f6830 is 16 bytes inside a block of size 160 free'd
==7273==    at 0x4C3323B: operator delete(void*) (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
==7273==    by 0xB6A22B: __gnu_cxx::new_allocator<std::__cxx1998::_List_node<ValueFlow::Value> >::deallocate(std::__cxx1998::_List_node<ValueFlow::Value>*, unsigned long) (new_allocator.h:125)
==7273==    by 0xB691BB: std::allocator_traits<std::allocator<std::__cxx1998::_List_node<ValueFlow::Value> > >::deallocate(std::allocator<std::__cxx1998::_List_node<ValueFlow::Value> >&, std::__cxx1998::_List_node<ValueFlow::Value>*, unsigned long) (alloc_traits.h:462)
==7273==    by 0xB664C7: std::__cxx1998::__cxx11::_List_base<ValueFlow::Value, std::allocator<ValueFlow::Value> >::_M_put_node(std::__cxx1998::_List_node<ValueFlow::Value>*) (stl_list.h:387)
==7273==    by 0xB6911C: std::__cxx1998::__cxx11::list<ValueFlow::Value, std::allocator<ValueFlow::Value> >::_M_erase(std::__cxx1998::_List_iterator<ValueFlow::Value>) (stl_list.h:1820)
==7273==    by 0xB66444: std::__cxx1998::__cxx11::list<ValueFlow::Value, std::allocator<ValueFlow::Value> >::erase(std::__cxx1998::_List_const_iterator<ValueFlow::Value>) (list.tcc:157)
==7273==    by 0xB629A2: std::__debug::list<ValueFlow::Value, std::allocator<ValueFlow::Value> >::_M_erase(std::__cxx1998::_List_const_iterator<ValueFlow::Value>) (list:491)
==7273==    by 0xEAECB9: std::__debug::list<ValueFlow::Value, std::allocator<ValueFlow::Value> >::remove(ValueFlow::Value const&) (list:650)
==7273==    by 0xEA9821: removeContradiction(std::__debug::list<ValueFlow::Value, std::allocator<ValueFlow::Value> >&) (token.cpp:1927)
==7273==    by 0xEA9B59: removeContradictions(std::__debug::list<ValueFlow::Value, std::allocator<ValueFlow::Value> >&) (token.cpp:1970)
==7273==    by 0xEAA223: Token::addValue(ValueFlow::Value const&) (token.cpp:2061)
==7273==    by 0xF3D1AA: setTokenValue(Token*, ValueFlow::Value const&, Settings const*) (valueflow.cpp:342)
==7273==  Block was alloc'd at
==7273==    at 0x4C3217F: operator new(unsigned long) (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
==7273==    by 0xB6C9CB: __gnu_cxx::new_allocator<std::__cxx1998::_List_node<ValueFlow::Value> >::allocate(unsigned long, void const*) (new_allocator.h:111)
==7273==    by 0xB6C423: std::allocator_traits<std::allocator<std::__cxx1998::_List_node<ValueFlow::Value> > >::allocate(std::allocator<std::__cxx1998::_List_node<ValueFlow::Value> >&, unsigned long) (alloc_traits.h:436)
==7273==    by 0xB6B14A: std::__cxx1998::__cxx11::_List_base<ValueFlow::Value, std::allocator<ValueFlow::Value> >::_M_get_node() (stl_list.h:383)
==7273==    by 0xB6A275: std::__cxx1998::_List_node<ValueFlow::Value>* std::__cxx1998::__cxx11::list<ValueFlow::Value, std::allocator<ValueFlow::Value> >::_M_create_node<ValueFlow::Value const&>(ValueFlow::Value const&) (stl_list.h:572)
==7273==    by 0xB69373: void std::__cxx1998::__cxx11::list<ValueFlow::Value, std::allocator<ValueFlow::Value> >::_M_insert<ValueFlow::Value const&>(std::__cxx1998::_List_iterator<ValueFlow::Value>, ValueFlow::Value const&) (stl_list.h:1801)
==7273==    by 0xEAF029: std::__cxx1998::__cxx11::list<ValueFlow::Value, std::allocator<ValueFlow::Value> >::push_back(ValueFlow::Value const&) (stl_list.h:1118)
==7273==    by 0xEB00D1: std::__cxx1998::__cxx11::list<ValueFlow::Value, std::allocator<ValueFlow::Value> >::_M_fill_initialize(unsigned long, ValueFlow::Value const&) (stl_list.h:1742)
==7273==    by 0xEAF8E2: std::__cxx1998::__cxx11::list<ValueFlow::Value, std::allocator<ValueFlow::Value> >::list(unsigned long, ValueFlow::Value const&, std::allocator<ValueFlow::Value> const&) (stl_list.h:628)
==7273==    by 0xEAF06E: std::__debug::list<ValueFlow::Value, std::allocator<ValueFlow::Value> >::list(unsigned long, ValueFlow::Value const&, std::allocator<ValueFlow::Value> const&) (list:118)
==7273==    by 0xEAA1DC: Token::addValue(ValueFlow::Value const&) (token.cpp:2058)
==7273==    by 0xF3D1AA: setTokenValue(Token*, ValueFlow::Value const&, Settings const*) (valueflow.cpp:342)
==7273== 
==7273== Invalid read of size 8
==7273==    at 0xB9C884: ValueFlow::Value::equalValue(ValueFlow::Value const&) const (valueflow.h:98)
==7273==    by 0xEAD828: ValueFlow::Value::operator==(ValueFlow::Value const&) const (valueflow.h:147)
==7273==    by 0xEAEC8F: std::__debug::list<ValueFlow::Value, std::allocator<ValueFlow::Value> >::remove(ValueFlow::Value const&) (list:649)
==7273==    by 0xEA9821: removeContradiction(std::__debug::list<ValueFlow::Value, std::allocator<ValueFlow::Value> >&) (token.cpp:1927)
==7273==    by 0xEA9B59: removeContradictions(std::__debug::list<ValueFlow::Value, std::allocator<ValueFlow::Value> >&) (token.cpp:1970)
==7273==    by 0xEAA223: Token::addValue(ValueFlow::Value const&) (token.cpp:2061)
==7273==    by 0xF3D1AA: setTokenValue(Token*, ValueFlow::Value const&, Settings const*) (valueflow.cpp:342)
==7273==    by 0xF3F1FC: setTokenValue(Token*, ValueFlow::Value const&, Settings const*) (valueflow.cpp:636)
==7273==    by 0xF6C7FC: ValueFlowAnalyzer::update(Token*, Analyzer::Action, Analyzer::Direction) (valueflow.cpp:2240)
==7273==    by 0xD998D4: ForwardTraversal::update(Token*) (forwardanalyzer.cpp:131)
==7273==    by 0xD99AC1: ForwardTraversal::updateRecursive(Token*)::{lambda(Token*)#1}::operator()(Token*) const (forwardanalyzer.cpp:152)
==7273==    by 0xD9E148: std::_Function_handler<ForwardTraversal::Progress (Token*), ForwardTraversal::updateRecursive(Token*)::{lambda(Token*)#1}>::_M_invoke(std::_Any_data const&, Token*&&) (std_function.h:302)
==7273==  Address 0x89f6838 is 24 bytes inside a block of size 160 free'd
==7273==    at 0x4C3323B: operator delete(void*) (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
==7273==    by 0xB6A22B: __gnu_cxx::new_allocator<std::__cxx1998::_List_node<ValueFlow::Value> >::deallocate(std::__cxx1998::_List_node<ValueFlow::Value>*, unsigned long) (new_allocator.h:125)
==7273==    by 0xB691BB: std::allocator_traits<std::allocator<std::__cxx1998::_List_node<ValueFlow::Value> > >::deallocate(std::allocator<std::__cxx1998::_List_node<ValueFlow::Value> >&, std::__cxx1998::_List_node<ValueFlow::Value>*, unsigned long) (alloc_traits.h:462)
==7273==    by 0xB664C7: std::__cxx1998::__cxx11::_List_base<ValueFlow::Value, std::allocator<ValueFlow::Value> >::_M_put_node(std::__cxx1998::_List_node<ValueFlow::Value>*) (stl_list.h:387)
==7273==    by 0xB6911C: std::__cxx1998::__cxx11::list<ValueFlow::Value, std::allocator<ValueFlow::Value> >::_M_erase(std::__cxx1998::_List_iterator<ValueFlow::Value>) (stl_list.h:1820)
==7273==    by 0xB66444: std::__cxx1998::__cxx11::list<ValueFlow::Value, std::allocator<ValueFlow::Value> >::erase(std::__cxx1998::_List_const_iterator<ValueFlow::Value>) (list.tcc:157)
==7273==    by 0xB629A2: std::__debug::list<ValueFlow::Value, std::allocator<ValueFlow::Value> >::_M_erase(std::__cxx1998::_List_const_iterator<ValueFlow::Value>) (list:491)
==7273==    by 0xEAECB9: std::__debug::list<ValueFlow::Value, std::allocator<ValueFlow::Value> >::remove(ValueFlow::Value const&) (list:650)
==7273==    by 0xEA9821: removeContradiction(std::__debug::list<ValueFlow::Value, std::allocator<ValueFlow::Value> >&) (token.cpp:1927)
==7273==    by 0xEA9B59: removeContradictions(std::__debug::list<ValueFlow::Value, std::allocator<ValueFlow::Value> >&) (token.cpp:1970)
==7273==    by 0xEAA223: Token::addValue(ValueFlow::Value const&) (token.cpp:2061)
==7273==    by 0xF3D1AA: setTokenValue(Token*, ValueFlow::Value const&, Settings const*) (valueflow.cpp:342)
==7273==  Block was alloc'd at
==7273==    at 0x4C3217F: operator new(unsigned long) (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
==7273==    by 0xB6C9CB: __gnu_cxx::new_allocator<std::__cxx1998::_List_node<ValueFlow::Value> >::allocate(unsigned long, void const*) (new_allocator.h:111)
==7273==    by 0xB6C423: std::allocator_traits<std::allocator<std::__cxx1998::_List_node<ValueFlow::Value> > >::allocate(std::allocator<std::__cxx1998::_List_node<ValueFlow::Value> >&, unsigned long) (alloc_traits.h:436)
==7273==    by 0xB6B14A: std::__cxx1998::__cxx11::_List_base<ValueFlow::Value, std::allocator<ValueFlow::Value> >::_M_get_node() (stl_list.h:383)
==7273==    by 0xB6A275: std::__cxx1998::_List_node<ValueFlow::Value>* std::__cxx1998::__cxx11::list<ValueFlow::Value, std::allocator<ValueFlow::Value> >::_M_create_node<ValueFlow::Value const&>(ValueFlow::Value const&) (stl_list.h:572)
==7273==    by 0xB69373: void std::__cxx1998::__cxx11::list<ValueFlow::Value, std::allocator<ValueFlow::Value> >::_M_insert<ValueFlow::Value const&>(std::__cxx1998::_List_iterator<ValueFlow::Value>, ValueFlow::Value const&) (stl_list.h:1801)
==7273==    by 0xEAF029: std::__cxx1998::__cxx11::list<ValueFlow::Value, std::allocator<ValueFlow::Value> >::push_back(ValueFlow::Value const&) (stl_list.h:1118)
==7273==    by 0xEB00D1: std::__cxx1998::__cxx11::list<ValueFlow::Value, std::allocator<ValueFlow::Value> >::_M_fill_initialize(unsigned long, ValueFlow::Value const&) (stl_list.h:1742)
==7273==    by 0xEAF8E2: std::__cxx1998::__cxx11::list<ValueFlow::Value, std::allocator<ValueFlow::Value> >::list(unsigned long, ValueFlow::Value const&, std::allocator<ValueFlow::Value> const&) (stl_list.h:628)
==7273==    by 0xEAF06E: std::__debug::list<ValueFlow::Value, std::allocator<ValueFlow::Value> >::list(unsigned long, ValueFlow::Value const&, std::allocator<ValueFlow::Value> const&) (list:118)
==7273==    by 0xEAA1DC: Token::addValue(ValueFlow::Value const&) (token.cpp:2058)
==7273==    by 0xF3D1AA: setTokenValue(Token*, ValueFlow::Value const&, Settings const*) (valueflow.cpp:342)
==7273== 
==7273== Invalid read of size 8
==7273==    at 0xEAD846: ValueFlow::Value::operator==(ValueFlow::Value const&) const (valueflow.h:150)
==7273==    by 0xEAEC8F: std::__debug::list<ValueFlow::Value, std::allocator<ValueFlow::Value> >::remove(ValueFlow::Value const&) (list:649)
==7273==    by 0xEA9821: removeContradiction(std::__debug::list<ValueFlow::Value, std::allocator<ValueFlow::Value> >&) (token.cpp:1927)
==7273==    by 0xEA9B59: removeContradictions(std::__debug::list<ValueFlow::Value, std::allocator<ValueFlow::Value> >&) (token.cpp:1970)
==7273==    by 0xEAA223: Token::addValue(ValueFlow::Value const&) (token.cpp:2061)
==7273==    by 0xF3D1AA: setTokenValue(Token*, ValueFlow::Value const&, Settings const*) (valueflow.cpp:342)
==7273==    by 0xF3F1FC: setTokenValue(Token*, ValueFlow::Value const&, Settings const*) (valueflow.cpp:636)
==7273==    by 0xF6C7FC: ValueFlowAnalyzer::update(Token*, Analyzer::Action, Analyzer::Direction) (valueflow.cpp:2240)
==7273==    by 0xD998D4: ForwardTraversal::update(Token*) (forwardanalyzer.cpp:131)
==7273==    by 0xD99AC1: ForwardTraversal::updateRecursive(Token*)::{lambda(Token*)#1}::operator()(Token*) const (forwardanalyzer.cpp:152)
==7273==    by 0xD9E148: std::_Function_handler<ForwardTraversal::Progress (Token*), ForwardTraversal::updateRecursive(Token*)::{lambda(Token*)#1}>::_M_invoke(std::_Any_data const&, Token*&&) (std_function.h:302)
==7273==    by 0xD9E096: std::function<ForwardTraversal::Progress (Token*)>::operator()(Token*) const (std_function.h:706)
==7273==  Address 0x89f6858 is 56 bytes inside a block of size 160 free'd
==7273==    at 0x4C3323B: operator delete(void*) (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
==7273==    by 0xB6A22B: __gnu_cxx::new_allocator<std::__cxx1998::_List_node<ValueFlow::Value> >::deallocate(std::__cxx1998::_List_node<ValueFlow::Value>*, unsigned long) (new_allocator.h:125)
==7273==    by 0xB691BB: std::allocator_traits<std::allocator<std::__cxx1998::_List_node<ValueFlow::Value> > >::deallocate(std::allocator<std::__cxx1998::_List_node<ValueFlow::Value> >&, std::__cxx1998::_List_node<ValueFlow::Value>*, unsigned long) (alloc_traits.h:462)
==7273==    by 0xB664C7: std::__cxx1998::__cxx11::_List_base<ValueFlow::Value, std::allocator<ValueFlow::Value> >::_M_put_node(std::__cxx1998::_List_node<ValueFlow::Value>*) (stl_list.h:387)
==7273==    by 0xB6911C: std::__cxx1998::__cxx11::list<ValueFlow::Value, std::allocator<ValueFlow::Value> >::_M_erase(std::__cxx1998::_List_iterator<ValueFlow::Value>) (stl_list.h:1820)
==7273==    by 0xB66444: std::__cxx1998::__cxx11::list<ValueFlow::Value, std::allocator<ValueFlow::Value> >::erase(std::__cxx1998::_List_const_iterator<ValueFlow::Value>) (list.tcc:157)
==7273==    by 0xB629A2: std::__debug::list<ValueFlow::Value, std::allocator<ValueFlow::Value> >::_M_erase(std::__cxx1998::_List_const_iterator<ValueFlow::Value>) (list:491)
==7273==    by 0xEAECB9: std::__debug::list<ValueFlow::Value, std::allocator<ValueFlow::Value> >::remove(ValueFlow::Value const&) (list:650)
==7273==    by 0xEA9821: removeContradiction(std::__debug::list<ValueFlow::Value, std::allocator<ValueFlow::Value> >&) (token.cpp:1927)
==7273==    by 0xEA9B59: removeContradictions(std::__debug::list<ValueFlow::Value, std::allocator<ValueFlow::Value> >&) (token.cpp:1970)
==7273==    by 0xEAA223: Token::addValue(ValueFlow::Value const&) (token.cpp:2061)
==7273==    by 0xF3D1AA: setTokenValue(Token*, ValueFlow::Value const&, Settings const*) (valueflow.cpp:342)
==7273==  Block was alloc'd at
==7273==    at 0x4C3217F: operator new(unsigned long) (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
==7273==    by 0xB6C9CB: __gnu_cxx::new_allocator<std::__cxx1998::_List_node<ValueFlow::Value> >::allocate(unsigned long, void const*) (new_allocator.h:111)
==7273==    by 0xB6C423: std::allocator_traits<std::allocator<std::__cxx1998::_List_node<ValueFlow::Value> > >::allocate(std::allocator<std::__cxx1998::_List_node<ValueFlow::Value> >&, unsigned long) (alloc_traits.h:436)
==7273==    by 0xB6B14A: std::__cxx1998::__cxx11::_List_base<ValueFlow::Value, std::allocator<ValueFlow::Value> >::_M_get_node() (stl_list.h:383)
==7273==    by 0xB6A275: std::__cxx1998::_List_node<ValueFlow::Value>* std::__cxx1998::__cxx11::list<ValueFlow::Value, std::allocator<ValueFlow::Value> >::_M_create_node<ValueFlow::Value const&>(ValueFlow::Value const&) (stl_list.h:572)
==7273==    by 0xB69373: void std::__cxx1998::__cxx11::list<ValueFlow::Value, std::allocator<ValueFlow::Value> >::_M_insert<ValueFlow::Value const&>(std::__cxx1998::_List_iterator<ValueFlow::Value>, ValueFlow::Value const&) (stl_list.h:1801)
==7273==    by 0xEAF029: std::__cxx1998::__cxx11::list<ValueFlow::Value, std::allocator<ValueFlow::Value> >::push_back(ValueFlow::Value const&) (stl_list.h:1118)
==7273==    by 0xEB00D1: std::__cxx1998::__cxx11::list<ValueFlow::Value, std::allocator<ValueFlow::Value> >::_M_fill_initialize(unsigned long, ValueFlow::Value const&) (stl_list.h:1742)
==7273==    by 0xEAF8E2: std::__cxx1998::__cxx11::list<ValueFlow::Value, std::allocator<ValueFlow::Value> >::list(unsigned long, ValueFlow::Value const&, std::allocator<ValueFlow::Value> const&) (stl_list.h:628)
==7273==    by 0xEAF06E: std::__debug::list<ValueFlow::Value, std::allocator<ValueFlow::Value> >::list(unsigned long, ValueFlow::Value const&, std::allocator<ValueFlow::Value> const&) (list:118)
==7273==    by 0xEAA1DC: Token::addValue(ValueFlow::Value const&) (token.cpp:2058)
==7273==    by 0xF3D1AA: setTokenValue(Token*, ValueFlow::Value const&, Settings const*) (valueflow.cpp:342)
==7273== 
==7273== Invalid read of size 8
==7273==    at 0xEAD85F: ValueFlow::Value::operator==(ValueFlow::Value const&) const (valueflow.h:151)
==7273==    by 0xEAEC8F: std::__debug::list<ValueFlow::Value, std::allocator<ValueFlow::Value> >::remove(ValueFlow::Value const&) (list:649)
==7273==    by 0xEA9821: removeContradiction(std::__debug::list<ValueFlow::Value, std::allocator<ValueFlow::Value> >&) (token.cpp:1927)
==7273==    by 0xEA9B59: removeContradictions(std::__debug::list<ValueFlow::Value, std::allocator<ValueFlow::Value> >&) (token.cpp:1970)
==7273==    by 0xEAA223: Token::addValue(ValueFlow::Value const&) (token.cpp:2061)
==7273==    by 0xF3D1AA: setTokenValue(Token*, ValueFlow::Value const&, Settings const*) (valueflow.cpp:342)
==7273==    by 0xF3F1FC: setTokenValue(Token*, ValueFlow::Value const&, Settings const*) (valueflow.cpp:636)
==7273==    by 0xF6C7FC: ValueFlowAnalyzer::update(Token*, Analyzer::Action, Analyzer::Direction) (valueflow.cpp:2240)
==7273==    by 0xD998D4: ForwardTraversal::update(Token*) (forwardanalyzer.cpp:131)
==7273==    by 0xD99AC1: ForwardTraversal::updateRecursive(Token*)::{lambda(Token*)#1}::operator()(Token*) const (forwardanalyzer.cpp:152)
==7273==    by 0xD9E148: std::_Function_handler<ForwardTraversal::Progress (Token*), ForwardTraversal::updateRecursive(Token*)::{lambda(Token*)#1}>::_M_invoke(std::_Any_data const&, Token*&&) (std_function.h:302)
==7273==    by 0xD9E096: std::function<ForwardTraversal::Progress (Token*)>::operator()(Token*) const (std_function.h:706)
==7273==  Address 0x89f6860 is 64 bytes inside a block of size 160 free'd
==7273==    at 0x4C3323B: operator delete(void*) (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
==7273==    by 0xB6A22B: __gnu_cxx::new_allocator<std::__cxx1998::_List_node<ValueFlow::Value> >::deallocate(std::__cxx1998::_List_node<ValueFlow::Value>*, unsigned long) (new_allocator.h:125)
==7273==    by 0xB691BB: std::allocator_traits<std::allocator<std::__cxx1998::_List_node<ValueFlow::Value> > >::deallocate(std::allocator<std::__cxx1998::_List_node<ValueFlow::Value> >&, std::__cxx1998::_List_node<ValueFlow::Value>*, unsigned long) (alloc_traits.h:462)
==7273==    by 0xB664C7: std::__cxx1998::__cxx11::_List_base<ValueFlow::Value, std::allocator<ValueFlow::Value> >::_M_put_node(std::__cxx1998::_List_node<ValueFlow::Value>*) (stl_list.h:387)
==7273==    by 0xB6911C: std::__cxx1998::__cxx11::list<ValueFlow::Value, std::allocator<ValueFlow::Value> >::_M_erase(std::__cxx1998::_List_iterator<ValueFlow::Value>) (stl_list.h:1820)
==7273==    by 0xB66444: std::__cxx1998::__cxx11::list<ValueFlow::Value, std::allocator<ValueFlow::Value> >::erase(std::__cxx1998::_List_const_iterator<ValueFlow::Value>) (list.tcc:157)
==7273==    by 0xB629A2: std::__debug::list<ValueFlow::Value, std::allocator<ValueFlow::Value> >::_M_erase(std::__cxx1998::_List_const_iterator<ValueFlow::Value>) (list:491)
==7273==    by 0xEAECB9: std::__debug::list<ValueFlow::Value, std::allocator<ValueFlow::Value> >::remove(ValueFlow::Value const&) (list:650)
==7273==    by 0xEA9821: removeContradiction(std::__debug::list<ValueFlow::Value, std::allocator<ValueFlow::Value> >&) (token.cpp:1927)
==7273==    by 0xEA9B59: removeContradictions(std::__debug::list<ValueFlow::Value, std::allocator<ValueFlow::Value> >&) (token.cpp:1970)
==7273==    by 0xEAA223: Token::addValue(ValueFlow::Value const&) (token.cpp:2061)
==7273==    by 0xF3D1AA: setTokenValue(Token*, ValueFlow::Value const&, Settings const*) (valueflow.cpp:342)
==7273==  Block was alloc'd at
==7273==    at 0x4C3217F: operator new(unsigned long) (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
==7273==    by 0xB6C9CB: __gnu_cxx::new_allocator<std::__cxx1998::_List_node<ValueFlow::Value> >::allocate(unsigned long, void const*) (new_allocator.h:111)
==7273==    by 0xB6C423: std::allocator_traits<std::allocator<std::__cxx1998::_List_node<ValueFlow::Value> > >::allocate(std::allocator<std::__cxx1998::_List_node<ValueFlow::Value> >&, unsigned long) (alloc_traits.h:436)
==7273==    by 0xB6B14A: std::__cxx1998::__cxx11::_List_base<ValueFlow::Value, std::allocator<ValueFlow::Value> >::_M_get_node() (stl_list.h:383)
==7273==    by 0xB6A275: std::__cxx1998::_List_node<ValueFlow::Value>* std::__cxx1998::__cxx11::list<ValueFlow::Value, std::allocator<ValueFlow::Value> >::_M_create_node<ValueFlow::Value const&>(ValueFlow::Value const&) (stl_list.h:572)
==7273==    by 0xB69373: void std::__cxx1998::__cxx11::list<ValueFlow::Value, std::allocator<ValueFlow::Value> >::_M_insert<ValueFlow::Value const&>(std::__cxx1998::_List_iterator<ValueFlow::Value>, ValueFlow::Value const&) (stl_list.h:1801)
==7273==    by 0xEAF029: std::__cxx1998::__cxx11::list<ValueFlow::Value, std::allocator<ValueFlow::Value> >::push_back(ValueFlow::Value const&) (stl_list.h:1118)
==7273==    by 0xEB00D1: std::__cxx1998::__cxx11::list<ValueFlow::Value, std::allocator<ValueFlow::Value> >::_M_fill_initialize(unsigned long, ValueFlow::Value const&) (stl_list.h:1742)
==7273==    by 0xEAF8E2: std::__cxx1998::__cxx11::list<ValueFlow::Value, std::allocator<ValueFlow::Value> >::list(unsigned long, ValueFlow::Value const&, std::allocator<ValueFlow::Value> const&) (stl_list.h:628)
==7273==    by 0xEAF06E: std::__debug::list<ValueFlow::Value, std::allocator<ValueFlow::Value> >::list(unsigned long, ValueFlow::Value const&, std::allocator<ValueFlow::Value> const&) (list:118)
==7273==    by 0xEAA1DC: Token::addValue(ValueFlow::Value const&) (token.cpp:2058)
==7273==    by 0xF3D1AA: setTokenValue(Token*, ValueFlow::Value const&, Settings const*) (valueflow.cpp:342)
==7273== 
==7273== Invalid read of size 4
==7273==    at 0xEAD873: ValueFlow::Value::operator==(ValueFlow::Value const&) const (valueflow.h:152)
==7273==    by 0xEAEC8F: std::__debug::list<ValueFlow::Value, std::allocator<ValueFlow::Value> >::remove(ValueFlow::Value const&) (list:649)
==7273==    by 0xEA9821: removeContradiction(std::__debug::list<ValueFlow::Value, std::allocator<ValueFlow::Value> >&) (token.cpp:1927)
==7273==    by 0xEA9B59: removeContradictions(std::__debug::list<ValueFlow::Value, std::allocator<ValueFlow::Value> >&) (token.cpp:1970)
==7273==    by 0xEAA223: Token::addValue(ValueFlow::Value const&) (token.cpp:2061)
==7273==    by 0xF3D1AA: setTokenValue(Token*, ValueFlow::Value const&, Settings const*) (valueflow.cpp:342)
==7273==    by 0xF3F1FC: setTokenValue(Token*, ValueFlow::Value const&, Settings const*) (valueflow.cpp:636)
==7273==    by 0xF6C7FC: ValueFlowAnalyzer::update(Token*, Analyzer::Action, Analyzer::Direction) (valueflow.cpp:2240)
==7273==    by 0xD998D4: ForwardTraversal::update(Token*) (forwardanalyzer.cpp:131)
==7273==    by 0xD99AC1: ForwardTraversal::updateRecursive(Token*)::{lambda(Token*)#1}::operator()(Token*) const (forwardanalyzer.cpp:152)
==7273==    by 0xD9E148: std::_Function_handler<ForwardTraversal::Progress (Token*), ForwardTraversal::updateRecursive(Token*)::{lambda(Token*)#1}>::_M_invoke(std::_Any_data const&, Token*&&) (std_function.h:302)
==7273==    by 0xD9E096: std::function<ForwardTraversal::Progress (Token*)>::operator()(Token*) const (std_function.h:706)
==7273==  Address 0x89f6898 is 120 bytes inside a block of size 160 free'd
==7273==    at 0x4C3323B: operator delete(void*) (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
==7273==    by 0xB6A22B: __gnu_cxx::new_allocator<std::__cxx1998::_List_node<ValueFlow::Value> >::deallocate(std::__cxx1998::_List_node<ValueFlow::Value>*, unsigned long) (new_allocator.h:125)
==7273==    by 0xB691BB: std::allocator_traits<std::allocator<std::__cxx1998::_List_node<ValueFlow::Value> > >::deallocate(std::allocator<std::__cxx1998::_List_node<ValueFlow::Value> >&, std::__cxx1998::_List_node<ValueFlow::Value>*, unsigned long) (alloc_traits.h:462)
==7273==    by 0xB664C7: std::__cxx1998::__cxx11::_List_base<ValueFlow::Value, std::allocator<ValueFlow::Value> >::_M_put_node(std::__cxx1998::_List_node<ValueFlow::Value>*) (stl_list.h:387)
==7273==    by 0xB6911C: std::__cxx1998::__cxx11::list<ValueFlow::Value, std::allocator<ValueFlow::Value> >::_M_erase(std::__cxx1998::_List_iterator<ValueFlow::Value>) (stl_list.h:1820)
==7273==    by 0xB66444: std::__cxx1998::__cxx11::list<ValueFlow::Value, std::allocator<ValueFlow::Value> >::erase(std::__cxx1998::_List_const_iterator<ValueFlow::Value>) (list.tcc:157)
==7273==    by 0xB629A2: std::__debug::list<ValueFlow::Value, std::allocator<ValueFlow::Value> >::_M_erase(std::__cxx1998::_List_const_iterator<ValueFlow::Value>) (list:491)
==7273==    by 0xEAECB9: std::__debug::list<ValueFlow::Value, std::allocator<ValueFlow::Value> >::remove(ValueFlow::Value const&) (list:650)
==7273==    by 0xEA9821: removeContradiction(std::__debug::list<ValueFlow::Value, std::allocator<ValueFlow::Value> >&) (token.cpp:1927)
==7273==    by 0xEA9B59: removeContradictions(std::__debug::list<ValueFlow::Value, std::allocator<ValueFlow::Value> >&) (token.cpp:1970)
==7273==    by 0xEAA223: Token::addValue(ValueFlow::Value const&) (token.cpp:2061)
==7273==    by 0xF3D1AA: setTokenValue(Token*, ValueFlow::Value const&, Settings const*) (valueflow.cpp:342)
==7273==  Block was alloc'd at
==7273==    at 0x4C3217F: operator new(unsigned long) (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
==7273==    by 0xB6C9CB: __gnu_cxx::new_allocator<std::__cxx1998::_List_node<ValueFlow::Value> >::allocate(unsigned long, void const*) (new_allocator.h:111)
==7273==    by 0xB6C423: std::allocator_traits<std::allocator<std::__cxx1998::_List_node<ValueFlow::Value> > >::allocate(std::allocator<std::__cxx1998::_List_node<ValueFlow::Value> >&, unsigned long) (alloc_traits.h:436)
==7273==    by 0xB6B14A: std::__cxx1998::__cxx11::_List_base<ValueFlow::Value, std::allocator<ValueFlow::Value> >::_M_get_node() (stl_list.h:383)
==7273==    by 0xB6A275: std::__cxx1998::_List_node<ValueFlow::Value>* std::__cxx1998::__cxx11::list<ValueFlow::Value, std::allocator<ValueFlow::Value> >::_M_create_node<ValueFlow::Value const&>(ValueFlow::Value const&) (stl_list.h:572)
==7273==    by 0xB69373: void std::__cxx1998::__cxx11::list<ValueFlow::Value, std::allocator<ValueFlow::Value> >::_M_insert<ValueFlow::Value const&>(std::__cxx1998::_List_iterator<ValueFlow::Value>, ValueFlow::Value const&) (stl_list.h:1801)
==7273==    by 0xEAF029: std::__cxx1998::__cxx11::list<ValueFlow::Value, std::allocator<ValueFlow::Value> >::push_back(ValueFlow::Value const&) (stl_list.h:1118)
==7273==    by 0xEB00D1: std::__cxx1998::__cxx11::list<ValueFlow::Value, std::allocator<ValueFlow::Value> >::_M_fill_initialize(unsigned long, ValueFlow::Value const&) (stl_list.h:1742)
==7273==    by 0xEAF8E2: std::__cxx1998::__cxx11::list<ValueFlow::Value, std::allocator<ValueFlow::Value> >::list(unsigned long, ValueFlow::Value const&, std::allocator<ValueFlow::Value> const&) (stl_list.h:628)
==7273==    by 0xEAF06E: std::__debug::list<ValueFlow::Value, std::allocator<ValueFlow::Value> >::list(unsigned long, ValueFlow::Value const&, std::allocator<ValueFlow::Value> const&) (list:118)
==7273==    by 0xEAA1DC: Token::addValue(ValueFlow::Value const&) (token.cpp:2058)
==7273==    by 0xF3D1AA: setTokenValue(Token*, ValueFlow::Value const&, Settings const*) (valueflow.cpp:342)
==7273== 
==7273== Invalid read of size 1
==7273==    at 0xEAD886: ValueFlow::Value::operator==(ValueFlow::Value const&) const (valueflow.h:153)
==7273==    by 0xEAEC8F: std::__debug::list<ValueFlow::Value, std::allocator<ValueFlow::Value> >::remove(ValueFlow::Value const&) (list:649)
==7273==    by 0xEA9821: removeContradiction(std::__debug::list<ValueFlow::Value, std::allocator<ValueFlow::Value> >&) (token.cpp:1927)
==7273==    by 0xEA9B59: removeContradictions(std::__debug::list<ValueFlow::Value, std::allocator<ValueFlow::Value> >&) (token.cpp:1970)
==7273==    by 0xEAA223: Token::addValue(ValueFlow::Value const&) (token.cpp:2061)
==7273==    by 0xF3D1AA: setTokenValue(Token*, ValueFlow::Value const&, Settings const*) (valueflow.cpp:342)
==7273==    by 0xF3F1FC: setTokenValue(Token*, ValueFlow::Value const&, Settings const*) (valueflow.cpp:636)
==7273==    by 0xF6C7FC: ValueFlowAnalyzer::update(Token*, Analyzer::Action, Analyzer::Direction) (valueflow.cpp:2240)
==7273==    by 0xD998D4: ForwardTraversal::update(Token*) (forwardanalyzer.cpp:131)
==7273==    by 0xD99AC1: ForwardTraversal::updateRecursive(Token*)::{lambda(Token*)#1}::operator()(Token*) const (forwardanalyzer.cpp:152)
==7273==    by 0xD9E148: std::_Function_handler<ForwardTraversal::Progress (Token*), ForwardTraversal::updateRecursive(Token*)::{lambda(Token*)#1}>::_M_invoke(std::_Any_data const&, Token*&&) (std_function.h:302)
==7273==    by 0xD9E096: std::function<ForwardTraversal::Progress (Token*)>::operator()(Token*) const (std_function.h:706)
==7273==  Address 0x89f689d is 125 bytes inside a block of size 160 free'd
==7273==    at 0x4C3323B: operator delete(void*) (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
==7273==    by 0xB6A22B: __gnu_cxx::new_allocator<std::__cxx1998::_List_node<ValueFlow::Value> >::deallocate(std::__cxx1998::_List_node<ValueFlow::Value>*, unsigned long) (new_allocator.h:125)
==7273==    by 0xB691BB: std::allocator_traits<std::allocator<std::__cxx1998::_List_node<ValueFlow::Value> > >::deallocate(std::allocator<std::__cxx1998::_List_node<ValueFlow::Value> >&, std::__cxx1998::_List_node<ValueFlow::Value>*, unsigned long) (alloc_traits.h:462)
==7273==    by 0xB664C7: std::__cxx1998::__cxx11::_List_base<ValueFlow::Value, std::allocator<ValueFlow::Value> >::_M_put_node(std::__cxx1998::_List_node<ValueFlow::Value>*) (stl_list.h:387)
==7273==    by 0xB6911C: std::__cxx1998::__cxx11::list<ValueFlow::Value, std::allocator<ValueFlow::Value> >::_M_erase(std::__cxx1998::_List_iterator<ValueFlow::Value>) (stl_list.h:1820)
==7273==    by 0xB66444: std::__cxx1998::__cxx11::list<ValueFlow::Value, std::allocator<ValueFlow::Value> >::erase(std::__cxx1998::_List_const_iterator<ValueFlow::Value>) (list.tcc:157)
==7273==    by 0xB629A2: std::__debug::list<ValueFlow::Value, std::allocator<ValueFlow::Value> >::_M_erase(std::__cxx1998::_List_const_iterator<ValueFlow::Value>) (list:491)
==7273==    by 0xEAECB9: std::__debug::list<ValueFlow::Value, std::allocator<ValueFlow::Value> >::remove(ValueFlow::Value const&) (list:650)
==7273==    by 0xEA9821: removeContradiction(std::__debug::list<ValueFlow::Value, std::allocator<ValueFlow::Value> >&) (token.cpp:1927)
==7273==    by 0xEA9B59: removeContradictions(std::__debug::list<ValueFlow::Value, std::allocator<ValueFlow::Value> >&) (token.cpp:1970)
==7273==    by 0xEAA223: Token::addValue(ValueFlow::Value const&) (token.cpp:2061)
==7273==    by 0xF3D1AA: setTokenValue(Token*, ValueFlow::Value const&, Settings const*) (valueflow.cpp:342)
==7273==  Block was alloc'd at
==7273==    at 0x4C3217F: operator new(unsigned long) (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
==7273==    by 0xB6C9CB: __gnu_cxx::new_allocator<std::__cxx1998::_List_node<ValueFlow::Value> >::allocate(unsigned long, void const*) (new_allocator.h:111)
==7273==    by 0xB6C423: std::allocator_traits<std::allocator<std::__cxx1998::_List_node<ValueFlow::Value> > >::allocate(std::allocator<std::__cxx1998::_List_node<ValueFlow::Value> >&, unsigned long) (alloc_traits.h:436)
==7273==    by 0xB6B14A: std::__cxx1998::__cxx11::_List_base<ValueFlow::Value, std::allocator<ValueFlow::Value> >::_M_get_node() (stl_list.h:383)
==7273==    by 0xB6A275: std::__cxx1998::_List_node<ValueFlow::Value>* std::__cxx1998::__cxx11::list<ValueFlow::Value, std::allocator<ValueFlow::Value> >::_M_create_node<ValueFlow::Value const&>(ValueFlow::Value const&) (stl_list.h:572)
==7273==    by 0xB69373: void std::__cxx1998::__cxx11::list<ValueFlow::Value, std::allocator<ValueFlow::Value> >::_M_insert<ValueFlow::Value const&>(std::__cxx1998::_List_iterator<ValueFlow::Value>, ValueFlow::Value const&) (stl_list.h:1801)
==7273==    by 0xEAF029: std::__cxx1998::__cxx11::list<ValueFlow::Value, std::allocator<ValueFlow::Value> >::push_back(ValueFlow::Value const&) (stl_list.h:1118)
==7273==    by 0xEB00D1: std::__cxx1998::__cxx11::list<ValueFlow::Value, std::allocator<ValueFlow::Value> >::_M_fill_initialize(unsigned long, ValueFlow::Value const&) (stl_list.h:1742)
==7273==    by 0xEAF8E2: std::__cxx1998::__cxx11::list<ValueFlow::Value, std::allocator<ValueFlow::Value> >::list(unsigned long, ValueFlow::Value const&, std::allocator<ValueFlow::Value> const&) (stl_list.h:628)
==7273==    by 0xEAF06E: std::__debug::list<ValueFlow::Value, std::allocator<ValueFlow::Value> >::list(unsigned long, ValueFlow::Value const&, std::allocator<ValueFlow::Value> const&) (list:118)
==7273==    by 0xEAA1DC: Token::addValue(ValueFlow::Value const&) (token.cpp:2058)
==7273==    by 0xF3D1AA: setTokenValue(Token*, ValueFlow::Value const&, Settings const*) (valueflow.cpp:342)
==7273== 
==7273== Invalid read of size 1
==7273==    at 0xEAD89A: ValueFlow::Value::operator==(ValueFlow::Value const&) const (valueflow.h:154)
==7273==    by 0xEAEC8F: std::__debug::list<ValueFlow::Value, std::allocator<ValueFlow::Value> >::remove(ValueFlow::Value const&) (list:649)
==7273==    by 0xEA9821: removeContradiction(std::__debug::list<ValueFlow::Value, std::allocator<ValueFlow::Value> >&) (token.cpp:1927)
==7273==    by 0xEA9B59: removeContradictions(std::__debug::list<ValueFlow::Value, std::allocator<ValueFlow::Value> >&) (token.cpp:1970)
==7273==    by 0xEAA223: Token::addValue(ValueFlow::Value const&) (token.cpp:2061)
==7273==    by 0xF3D1AA: setTokenValue(Token*, ValueFlow::Value const&, Settings const*) (valueflow.cpp:342)
==7273==    by 0xF3F1FC: setTokenValue(Token*, ValueFlow::Value const&, Settings const*) (valueflow.cpp:636)
==7273==    by 0xF6C7FC: ValueFlowAnalyzer::update(Token*, Analyzer::Action, Analyzer::Direction) (valueflow.cpp:2240)
==7273==    by 0xD998D4: ForwardTraversal::update(Token*) (forwardanalyzer.cpp:131)
==7273==    by 0xD99AC1: ForwardTraversal::updateRecursive(Token*)::{lambda(Token*)#1}::operator()(Token*) const (forwardanalyzer.cpp:152)
==7273==    by 0xD9E148: std::_Function_handler<ForwardTraversal::Progress (Token*), ForwardTraversal::updateRecursive(Token*)::{lambda(Token*)#1}>::_M_invoke(std::_Any_data const&, Token*&&) (std_function.h:302)
==7273==    by 0xD9E096: std::function<ForwardTraversal::Progress (Token*)>::operator()(Token*) const (std_function.h:706)
==7273==  Address 0x89f689e is 126 bytes inside a block of size 160 free'd
==7273==    at 0x4C3323B: operator delete(void*) (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
==7273==    by 0xB6A22B: __gnu_cxx::new_allocator<std::__cxx1998::_List_node<ValueFlow::Value> >::deallocate(std::__cxx1998::_List_node<ValueFlow::Value>*, unsigned long) (new_allocator.h:125)
==7273==    by 0xB691BB: std::allocator_traits<std::allocator<std::__cxx1998::_List_node<ValueFlow::Value> > >::deallocate(std::allocator<std::__cxx1998::_List_node<ValueFlow::Value> >&, std::__cxx1998::_List_node<ValueFlow::Value>*, unsigned long) (alloc_traits.h:462)
==7273==    by 0xB664C7: std::__cxx1998::__cxx11::_List_base<ValueFlow::Value, std::allocator<ValueFlow::Value> >::_M_put_node(std::__cxx1998::_List_node<ValueFlow::Value>*) (stl_list.h:387)
==7273==    by 0xB6911C: std::__cxx1998::__cxx11::list<ValueFlow::Value, std::allocator<ValueFlow::Value> >::_M_erase(std::__cxx1998::_List_iterator<ValueFlow::Value>) (stl_list.h:1820)
==7273==    by 0xB66444: std::__cxx1998::__cxx11::list<ValueFlow::Value, std::allocator<ValueFlow::Value> >::erase(std::__cxx1998::_List_const_iterator<ValueFlow::Value>) (list.tcc:157)
==7273==    by 0xB629A2: std::__debug::list<ValueFlow::Value, std::allocator<ValueFlow::Value> >::_M_erase(std::__cxx1998::_List_const_iterator<ValueFlow::Value>) (list:491)
==7273==    by 0xEAECB9: std::__debug::list<ValueFlow::Value, std::allocator<ValueFlow::Value> >::remove(ValueFlow::Value const&) (list:650)
==7273==    by 0xEA9821: removeContradiction(std::__debug::list<ValueFlow::Value, std::allocator<ValueFlow::Value> >&) (token.cpp:1927)
==7273==    by 0xEA9B59: removeContradictions(std::__debug::list<ValueFlow::Value, std::allocator<ValueFlow::Value> >&) (token.cpp:1970)
==7273==    by 0xEAA223: Token::addValue(ValueFlow::Value const&) (token.cpp:2061)
==7273==    by 0xF3D1AA: setTokenValue(Token*, ValueFlow::Value const&, Settings const*) (valueflow.cpp:342)
==7273==  Block was alloc'd at
==7273==    at 0x4C3217F: operator new(unsigned long) (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
==7273==    by 0xB6C9CB: __gnu_cxx::new_allocator<std::__cxx1998::_List_node<ValueFlow::Value> >::allocate(unsigned long, void const*) (new_allocator.h:111)
==7273==    by 0xB6C423: std::allocator_traits<std::allocator<std::__cxx1998::_List_node<ValueFlow::Value> > >::allocate(std::allocator<std::__cxx1998::_List_node<ValueFlow::Value> >&, unsigned long) (alloc_traits.h:436)
==7273==    by 0xB6B14A: std::__cxx1998::__cxx11::_List_base<ValueFlow::Value, std::allocator<ValueFlow::Value> >::_M_get_node() (stl_list.h:383)
==7273==    by 0xB6A275: std::__cxx1998::_List_node<ValueFlow::Value>* std::__cxx1998::__cxx11::list<ValueFlow::Value, std::allocator<ValueFlow::Value> >::_M_create_node<ValueFlow::Value const&>(ValueFlow::Value const&) (stl_list.h:572)
==7273==    by 0xB69373: void std::__cxx1998::__cxx11::list<ValueFlow::Value, std::allocator<ValueFlow::Value> >::_M_insert<ValueFlow::Value const&>(std::__cxx1998::_List_iterator<ValueFlow::Value>, ValueFlow::Value const&) (stl_list.h:1801)
==7273==    by 0xEAF029: std::__cxx1998::__cxx11::list<ValueFlow::Value, std::allocator<ValueFlow::Value> >::push_back(ValueFlow::Value const&) (stl_list.h:1118)
==7273==    by 0xEB00D1: std::__cxx1998::__cxx11::list<ValueFlow::Value, std::allocator<ValueFlow::Value> >::_M_fill_initialize(unsigned long, ValueFlow::Value const&) (stl_list.h:1742)
==7273==    by 0xEAF8E2: std::__cxx1998::__cxx11::list<ValueFlow::Value, std::allocator<ValueFlow::Value> >::list(unsigned long, ValueFlow::Value const&, std::allocator<ValueFlow::Value> const&) (stl_list.h:628)
==7273==    by 0xEAF06E: std::__debug::list<ValueFlow::Value, std::allocator<ValueFlow::Value> >::list(unsigned long, ValueFlow::Value const&, std::allocator<ValueFlow::Value> const&) (list:118)
==7273==    by 0xEAA1DC: Token::addValue(ValueFlow::Value const&) (token.cpp:2058)
==7273==    by 0xF3D1AA: setTokenValue(Token*, ValueFlow::Value const&, Settings const*) (valueflow.cpp:342)
==7273== 
==7273== Invalid read of size 4
==7273==    at 0xEAD8AD: ValueFlow::Value::operator==(ValueFlow::Value const&) const (valueflow.h:155)
==7273==    by 0xEAEC8F: std::__debug::list<ValueFlow::Value, std::allocator<ValueFlow::Value> >::remove(ValueFlow::Value const&) (list:649)
==7273==    by 0xEA9821: removeContradiction(std::__debug::list<ValueFlow::Value, std::allocator<ValueFlow::Value> >&) (token.cpp:1927)
==7273==    by 0xEA9B59: removeContradictions(std::__debug::list<ValueFlow::Value, std::allocator<ValueFlow::Value> >&) (token.cpp:1970)
==7273==    by 0xEAA223: Token::addValue(ValueFlow::Value const&) (token.cpp:2061)
==7273==    by 0xF3D1AA: setTokenValue(Token*, ValueFlow::Value const&, Settings const*) (valueflow.cpp:342)
==7273==    by 0xF3F1FC: setTokenValue(Token*, ValueFlow::Value const&, Settings const*) (valueflow.cpp:636)
==7273==    by 0xF6C7FC: ValueFlowAnalyzer::update(Token*, Analyzer::Action, Analyzer::Direction) (valueflow.cpp:2240)
==7273==    by 0xD998D4: ForwardTraversal::update(Token*) (forwardanalyzer.cpp:131)
==7273==    by 0xD99AC1: ForwardTraversal::updateRecursive(Token*)::{lambda(Token*)#1}::operator()(Token*) const (forwardanalyzer.cpp:152)
==7273==    by 0xD9E148: std::_Function_handler<ForwardTraversal::Progress (Token*), ForwardTraversal::updateRecursive(Token*)::{lambda(Token*)#1}>::_M_invoke(std::_Any_data const&, Token*&&) (std_function.h:302)
==7273==    by 0xD9E096: std::function<ForwardTraversal::Progress (Token*)>::operator()(Token*) const (std_function.h:706)
==7273==  Address 0x89f68a0 is 128 bytes inside a block of size 160 free'd
==7273==    at 0x4C3323B: operator delete(void*) (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
==7273==    by 0xB6A22B: __gnu_cxx::new_allocator<std::__cxx1998::_List_node<ValueFlow::Value> >::deallocate(std::__cxx1998::_List_node<ValueFlow::Value>*, unsigned long) (new_allocator.h:125)
==7273==    by 0xB691BB: std::allocator_traits<std::allocator<std::__cxx1998::_List_node<ValueFlow::Value> > >::deallocate(std::allocator<std::__cxx1998::_List_node<ValueFlow::Value> >&, std::__cxx1998::_List_node<ValueFlow::Value>*, unsigned long) (alloc_traits.h:462)
==7273==    by 0xB664C7: std::__cxx1998::__cxx11::_List_base<ValueFlow::Value, std::allocator<ValueFlow::Value> >::_M_put_node(std::__cxx1998::_List_node<ValueFlow::Value>*) (stl_list.h:387)
==7273==    by 0xB6911C: std::__cxx1998::__cxx11::list<ValueFlow::Value, std::allocator<ValueFlow::Value> >::_M_erase(std::__cxx1998::_List_iterator<ValueFlow::Value>) (stl_list.h:1820)
==7273==    by 0xB66444: std::__cxx1998::__cxx11::list<ValueFlow::Value, std::allocator<ValueFlow::Value> >::erase(std::__cxx1998::_List_const_iterator<ValueFlow::Value>) (list.tcc:157)
==7273==    by 0xB629A2: std::__debug::list<ValueFlow::Value, std::allocator<ValueFlow::Value> >::_M_erase(std::__cxx1998::_List_const_iterator<ValueFlow::Value>) (list:491)
==7273==    by 0xEAECB9: std::__debug::list<ValueFlow::Value, std::allocator<ValueFlow::Value> >::remove(ValueFlow::Value const&) (list:650)
==7273==    by 0xEA9821: removeContradiction(std::__debug::list<ValueFlow::Value, std::allocator<ValueFlow::Value> >&) (token.cpp:1927)
==7273==    by 0xEA9B59: removeContradictions(std::__debug::list<ValueFlow::Value, std::allocator<ValueFlow::Value> >&) (token.cpp:1970)
==7273==    by 0xEAA223: Token::addValue(ValueFlow::Value const&) (token.cpp:2061)
==7273==    by 0xF3D1AA: setTokenValue(Token*, ValueFlow::Value const&, Settings const*) (valueflow.cpp:342)
==7273==  Block was alloc'd at
==7273==    at 0x4C3217F: operator new(unsigned long) (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
==7273==    by 0xB6C9CB: __gnu_cxx::new_allocator<std::__cxx1998::_List_node<ValueFlow::Value> >::allocate(unsigned long, void const*) (new_allocator.h:111)
==7273==    by 0xB6C423: std::allocator_traits<std::allocator<std::__cxx1998::_List_node<ValueFlow::Value> > >::allocate(std::allocator<std::__cxx1998::_List_node<ValueFlow::Value> >&, unsigned long) (alloc_traits.h:436)
==7273==    by 0xB6B14A: std::__cxx1998::__cxx11::_List_base<ValueFlow::Value, std::allocator<ValueFlow::Value> >::_M_get_node() (stl_list.h:383)
==7273==    by 0xB6A275: std::__cxx1998::_List_node<ValueFlow::Value>* std::__cxx1998::__cxx11::list<ValueFlow::Value, std::allocator<ValueFlow::Value> >::_M_create_node<ValueFlow::Value const&>(ValueFlow::Value const&) (stl_list.h:572)
==7273==    by 0xB69373: void std::__cxx1998::__cxx11::list<ValueFlow::Value, std::allocator<ValueFlow::Value> >::_M_insert<ValueFlow::Value const&>(std::__cxx1998::_List_iterator<ValueFlow::Value>, ValueFlow::Value const&) (stl_list.h:1801)
==7273==    by 0xEAF029: std::__cxx1998::__cxx11::list<ValueFlow::Value, std::allocator<ValueFlow::Value> >::push_back(ValueFlow::Value const&) (stl_list.h:1118)
==7273==    by 0xEB00D1: std::__cxx1998::__cxx11::list<ValueFlow::Value, std::allocator<ValueFlow::Value> >::_M_fill_initialize(unsigned long, ValueFlow::Value const&) (stl_list.h:1742)
==7273==    by 0xEAF8E2: std::__cxx1998::__cxx11::list<ValueFlow::Value, std::allocator<ValueFlow::Value> >::list(unsigned long, ValueFlow::Value const&, std::allocator<ValueFlow::Value> const&) (stl_list.h:628)
==7273==    by 0xEAF06E: std::__debug::list<ValueFlow::Value, std::allocator<ValueFlow::Value> >::list(unsigned long, ValueFlow::Value const&, std::allocator<ValueFlow::Value> const&) (list:118)
==7273==    by 0xEAA1DC: Token::addValue(ValueFlow::Value const&) (token.cpp:2058)
==7273==    by 0xF3D1AA: setTokenValue(Token*, ValueFlow::Value const&, Settings const*) (valueflow.cpp:342)
==7273== 
==7273== Invalid read of size 4
==7273==    at 0xEAD8C2: ValueFlow::Value::operator==(ValueFlow::Value const&) const (valueflow.h:156)
==7273==    by 0xEAEC8F: std::__debug::list<ValueFlow::Value, std::allocator<ValueFlow::Value> >::remove(ValueFlow::Value const&) (list:649)
==7273==    by 0xEA9821: removeContradiction(std::__debug::list<ValueFlow::Value, std::allocator<ValueFlow::Value> >&) (token.cpp:1927)
==7273==    by 0xEA9B59: removeContradictions(std::__debug::list<ValueFlow::Value, std::allocator<ValueFlow::Value> >&) (token.cpp:1970)
==7273==    by 0xEAA223: Token::addValue(ValueFlow::Value const&) (token.cpp:2061)
==7273==    by 0xF3D1AA: setTokenValue(Token*, ValueFlow::Value const&, Settings const*) (valueflow.cpp:342)
==7273==    by 0xF3F1FC: setTokenValue(Token*, ValueFlow::Value const&, Settings const*) (valueflow.cpp:636)
==7273==    by 0xF6C7FC: ValueFlowAnalyzer::update(Token*, Analyzer::Action, Analyzer::Direction) (valueflow.cpp:2240)
==7273==    by 0xD998D4: ForwardTraversal::update(Token*) (forwardanalyzer.cpp:131)
==7273==    by 0xD99AC1: ForwardTraversal::updateRecursive(Token*)::{lambda(Token*)#1}::operator()(Token*) const (forwardanalyzer.cpp:152)
==7273==    by 0xD9E148: std::_Function_handler<ForwardTraversal::Progress (Token*), ForwardTraversal::updateRecursive(Token*)::{lambda(Token*)#1}>::_M_invoke(std::_Any_data const&, Token*&&) (std_function.h:302)
==7273==    by 0xD9E096: std::function<ForwardTraversal::Progress (Token*)>::operator()(Token*) const (std_function.h:706)
==7273==  Address 0x89f68b8 is 152 bytes inside a block of size 160 free'd
==7273==    at 0x4C3323B: operator delete(void*) (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
==7273==    by 0xB6A22B: __gnu_cxx::new_allocator<std::__cxx1998::_List_node<ValueFlow::Value> >::deallocate(std::__cxx1998::_List_node<ValueFlow::Value>*, unsigned long) (new_allocator.h:125)
==7273==    by 0xB691BB: std::allocator_traits<std::allocator<std::__cxx1998::_List_node<ValueFlow::Value> > >::deallocate(std::allocator<std::__cxx1998::_List_node<ValueFlow::Value> >&, std::__cxx1998::_List_node<ValueFlow::Value>*, unsigned long) (alloc_traits.h:462)
==7273==    by 0xB664C7: std::__cxx1998::__cxx11::_List_base<ValueFlow::Value, std::allocator<ValueFlow::Value> >::_M_put_node(std::__cxx1998::_List_node<ValueFlow::Value>*) (stl_list.h:387)
==7273==    by 0xB6911C: std::__cxx1998::__cxx11::list<ValueFlow::Value, std::allocator<ValueFlow::Value> >::_M_erase(std::__cxx1998::_List_iterator<ValueFlow::Value>) (stl_list.h:1820)
==7273==    by 0xB66444: std::__cxx1998::__cxx11::list<ValueFlow::Value, std::allocator<ValueFlow::Value> >::erase(std::__cxx1998::_List_const_iterator<ValueFlow::Value>) (list.tcc:157)
==7273==    by 0xB629A2: std::__debug::list<ValueFlow::Value, std::allocator<ValueFlow::Value> >::_M_erase(std::__cxx1998::_List_const_iterator<ValueFlow::Value>) (list:491)
==7273==    by 0xEAECB9: std::__debug::list<ValueFlow::Value, std::allocator<ValueFlow::Value> >::remove(ValueFlow::Value const&) (list:650)
==7273==    by 0xEA9821: removeContradiction(std::__debug::list<ValueFlow::Value, std::allocator<ValueFlow::Value> >&) (token.cpp:1927)
==7273==    by 0xEA9B59: removeContradictions(std::__debug::list<ValueFlow::Value, std::allocator<ValueFlow::Value> >&) (token.cpp:1970)
==7273==    by 0xEAA223: Token::addValue(ValueFlow::Value const&) (token.cpp:2061)
==7273==    by 0xF3D1AA: setTokenValue(Token*, ValueFlow::Value const&, Settings const*) (valueflow.cpp:342)
==7273==  Block was alloc'd at
==7273==    at 0x4C3217F: operator new(unsigned long) (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
==7273==    by 0xB6C9CB: __gnu_cxx::new_allocator<std::__cxx1998::_List_node<ValueFlow::Value> >::allocate(unsigned long, void const*) (new_allocator.h:111)
==7273==    by 0xB6C423: std::allocator_traits<std::allocator<std::__cxx1998::_List_node<ValueFlow::Value> > >::allocate(std::allocator<std::__cxx1998::_List_node<ValueFlow::Value> >&, unsigned long) (alloc_traits.h:436)
==7273==    by 0xB6B14A: std::__cxx1998::__cxx11::_List_base<ValueFlow::Value, std::allocator<ValueFlow::Value> >::_M_get_node() (stl_list.h:383)
==7273==    by 0xB6A275: std::__cxx1998::_List_node<ValueFlow::Value>* std::__cxx1998::__cxx11::list<ValueFlow::Value, std::allocator<ValueFlow::Value> >::_M_create_node<ValueFlow::Value const&>(ValueFlow::Value const&) (stl_list.h:572)
==7273==    by 0xB69373: void std::__cxx1998::__cxx11::list<ValueFlow::Value, std::allocator<ValueFlow::Value> >::_M_insert<ValueFlow::Value const&>(std::__cxx1998::_List_iterator<ValueFlow::Value>, ValueFlow::Value const&) (stl_list.h:1801)
==7273==    by 0xEAF029: std::__cxx1998::__cxx11::list<ValueFlow::Value, std::allocator<ValueFlow::Value> >::push_back(ValueFlow::Value const&) (stl_list.h:1118)
==7273==    by 0xEB00D1: std::__cxx1998::__cxx11::list<ValueFlow::Value, std::allocator<ValueFlow::Value> >::_M_fill_initialize(unsigned long, ValueFlow::Value const&) (stl_list.h:1742)
==7273==    by 0xEAF8E2: std::__cxx1998::__cxx11::list<ValueFlow::Value, std::allocator<ValueFlow::Value> >::list(unsigned long, ValueFlow::Value const&, std::allocator<ValueFlow::Value> const&) (stl_list.h:628)
==7273==    by 0xEAF06E: std::__debug::list<ValueFlow::Value, std::allocator<ValueFlow::Value> >::list(unsigned long, ValueFlow::Value const&, std::allocator<ValueFlow::Value> const&) (list:118)
==7273==    by 0xEAA1DC: Token::addValue(ValueFlow::Value const&) (token.cpp:2058)
==7273==    by 0xF3D1AA: setTokenValue(Token*, ValueFlow::Value const&, Settings const*) (valueflow.cpp:342)
==7273== 
TestExprEngine::expr8
==7424== Conditional jump or move depends on uninitialised value(s)
==7424==    at 0x584CBB5: ??? (in /usr/lib/x86_64-linux-gnu/libz3.so.4)
==7424==    by 0x584F213: ??? (in /usr/lib/x86_64-linux-gnu/libz3.so.4)
==7424==    by 0x58515A1: ??? (in /usr/lib/x86_64-linux-gnu/libz3.so.4)
==7424==    by 0x5851A34: ??? (in /usr/lib/x86_64-linux-gnu/libz3.so.4)
==7424==    by 0x5852A19: ??? (in /usr/lib/x86_64-linux-gnu/libz3.so.4)
==7424==    by 0x5849D5C: ??? (in /usr/lib/x86_64-linux-gnu/libz3.so.4)
==7424==    by 0x58C043D: ??? (in /usr/lib/x86_64-linux-gnu/libz3.so.4)
==7424==    by 0x58C5F03: ??? (in /usr/lib/x86_64-linux-gnu/libz3.so.4)
==7424==    by 0x58C6E67: ??? (in /usr/lib/x86_64-linux-gnu/libz3.so.4)
==7424==    by 0x58C6E67: ??? (in /usr/lib/x86_64-linux-gnu/libz3.so.4)
==7424==    by 0x58C6E67: ??? (in /usr/lib/x86_64-linux-gnu/libz3.so.4)
==7424==    by 0x58C6E67: ??? (in /usr/lib/x86_64-linux-gnu/libz3.so.4)
==7424==    by 0x58C5F03: ??? (in /usr/lib/x86_64-linux-gnu/libz3.so.4)
==7424==    by 0x58C6E67: ??? (in /usr/lib/x86_64-linux-gnu/libz3.so.4)
==7424==    by 0x58B6F93: ??? (in /usr/lib/x86_64-linux-gnu/libz3.so.4)
==7424==    by 0x58B7480: ??? (in /usr/lib/x86_64-linux-gnu/libz3.so.4)
==7424==    by 0x5723745: ??? (in /usr/lib/x86_64-linux-gnu/libz3.so.4)
==7424==    by 0x57190AB: ??? (in /usr/lib/x86_64-linux-gnu/libz3.so.4)
==7424==    by 0x571CA42: ??? (in /usr/lib/x86_64-linux-gnu/libz3.so.4)
==7424==    by 0x4EF4FD4: Z3_solver_check (in /usr/lib/x86_64-linux-gnu/libz3.so.4)
==7424==    by 0x749AC3: check (z3++.h:1304)
==7424==    by 0x749AC3: ExprEngine::BinOpResult::getExpr[abi:cxx11](ExprEngine::DataBase*) const (exprengine.cpp:1437)
==7424==    by 0x2ADD17: operator() (testexprengine.cpp:169)
==7424==    by 0x2ADD17: std::_Function_handler<void (Token const*, ExprEngine::Value const&, ExprEngine::DataBase*), TestExprEngine::expr(char const*, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)::{lambda(Token const*, ExprEngine::Value const&, ExprEngine::DataBase*)#1}>::_M_invoke(std::_Any_data const&, Token const*&&, ExprEngine::Value const&, ExprEngine::DataBase*&&) (std_function.h:316)
==7424==    by 0x74506E: operator() (std_function.h:706)
==7424==    by 0x74506E: call(std::vector<std::function<void (Token const*, ExprEngine::Value const&, ExprEngine::DataBase*)>, std::allocator<std::function<void (Token const*, ExprEngine::Value const&, ExprEngine::DataBase*)> > > const&, Token const*, std::shared_ptr<ExprEngine::Value>, (anonymous namespace)::Data*) (exprengine.cpp:1531)
==7424==    by 0x756A0B: executeBinaryOp (exprengine.cpp:2084)
==7424==    by 0x756A0B: executeExpression1(Token const*, (anonymous namespace)::Data&) (exprengine.cpp:2203)
==7424==    by 0x757D6F: executeExpression(Token const*, (anonymous namespace)::Data&) (exprengine.cpp:2228)
==7424==    by 0x75B9EB: execute(Token const*, Token const*, (anonymous namespace)::Data&) (exprengine.cpp:2302)
==7424==    by 0x75F3F6: execute(Token const*, Token const*, (anonymous namespace)::Data&)::{lambda(Token const*, Token const*, (anonymous namespace)::Data&)#2}::operator()(Token const*, Token const*, (anonymous namespace)::Data&) const (exprengine.cpp:2322)
==7424==    by 0x75BB8B: execute(Token const*, Token const*, (anonymous namespace)::Data&) (exprengine.cpp:2331)
==7424==    by 0x75DDCF: ExprEngine::executeFunction(Scope const*, ErrorLogger*, Tokenizer const*, Settings const*, std::vector<std::function<void (Token const*, ExprEngine::Value const&, ExprEngine::DataBase*)>, std::allocator<std::function<void (Token const*, ExprEngine::Value const&, ExprEngine::DataBase*)> > > const&, std::ostream&) (exprengine.cpp:2626)
==7424==    by 0x75F028: ExprEngine::executeAllFunctions(ErrorLogger*, Tokenizer const*, Settings const*, std::vector<std::function<void (Token const*, ExprEngine::Value const&, ExprEngine::DataBase*)>, std::allocator<std::function<void (Token const*, ExprEngine::Value const&, ExprEngine::DataBase*)> > > const&, std::ostream&) (exprengine.cpp:2503)
==7424==    by 0x2AF8CF: TestExprEngine::expr(char const*, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&) (testexprengine.cpp:174)
==7424==    by 0x2B5A38: expr8 (testexprengine.cpp:326)
==7424==    by 0x2B5A38: TestExprEngine::run() (testexprengine.cpp:49)
==7424==    by 0x4BA1E9: TestFixture::run(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&) (testsuite.cpp:309)
==7424==    by 0x4BB1A9: TestFixture::runTests(options const&) (testsuite.cpp:332)
==7424==    by 0x3E47E6: main (testrunner.cpp:44)
==7424==  Uninitialised value was created by a stack allocation
==7424==    at 0x5A4E860: ??? (in /usr/lib/x86_64-linux-gnu/libz3.so.4)
==7424== 
==8491== LEAK SUMMARY:
==8491==    definitely lost: 0 bytes in 0 blocks
==8491==    indirectly lost: 0 bytes in 0 blocks
==8491==      possibly lost: 86,848 bytes in 86 blocks
==8491==    still reachable: 882 bytes in 10 blocks
==8491==         suppressed: 0 bytes in 0 blocks
==8491== Rerun with --leak-check=full to see details of leaked memory

- name: Run valgrind
run: |
valgrind ./testrunner
valgrind --error-limit=no --leak-check=full --num-callers=50 --show-reachable=yes --track-fds=yes --track-origins=yes ./testrunner
Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

you forgot --error-exitcode=1

Aim: reduce the build duration
@firewave
Copy link
Copy Markdown
Collaborator

We should probably disable the glibcxx debug containers as well by passing -DCPPCHK_GLIBCXX_DEBUG. Having additional checks might slow down valgrind and doesn't really make sense. Not sure how much impact it has on the run-time.

Copy link
Copy Markdown
Owner

@danmar danmar left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I like this

@firewave
Copy link
Copy Markdown
Collaborator

It seems the memory leaks are caused by threads that are spawned and not properly cleaned up. I saw something similar while running ASAN which leads to the system being swamped with threads and then it runs out of memory because of the sanitizer overhead. Will have a look at that.

@firewave
Copy link
Copy Markdown
Collaborator

Try libz3-4-dbgsym. Also z3 is probably unnecessary and we just need the libz3-4 package.

@amai2012
Copy link
Copy Markdown
Collaborator Author

Try libz3-4-dbgsym. Also z3 is probably unnecessary and we just need the libz3-4 package.

Thanks, I'll try

@amai2012
Copy link
Copy Markdown
Collaborator Author

Try libz3-4-dbgsym. Also z3 is probably unnecessary and we just need the libz3-4 package.

Thanks, I'll try

Debug symbols are now available.
Maybe next:

  • performance: I doubt the glibc compile time flag will give a major boost, but may try
  • false positives/3rd party issues within z3: maybe we need a suppression file for valgrind

@firewave
Copy link
Copy Markdown
Collaborator

--gen-suppressions=all gives you the suppressions which you can just copy out to another file and specify it via --suppressions=<file>. Will take a look at the issues and see what is causing it - looks a bit weird like something isn't free'd by the C++ wrapper.

@firewave
Copy link
Copy Markdown
Collaborator

I found some issues with the forked processes which leads to zombies and too many processes being spawned. Will prepare a PR.

@firewave
Copy link
Copy Markdown
Collaborator

You could also use --log-file=memcheck.log.

@amai2012
Copy link
Copy Markdown
Collaborator Author

A run with all tests seems to generate too much output for now

@firewave
Copy link
Copy Markdown
Collaborator

Will take a look tomorrow.

@amai2012 amai2012 marked this pull request as ready for review November 30, 2020 18:54
Copy link
Copy Markdown
Owner

@danmar danmar left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

lgtm

@orbitcowboy
Copy link
Copy Markdown
Collaborator

Are there any improvements left? Otherwise i suggest to merge it.

@amai2012
Copy link
Copy Markdown
Collaborator Author

amai2012 commented Dec 6, 2020

Currently only a small subset of testrunner testsuites are being run.
The remaining test should be added as well. Adding more tests might cause

  • possible false positives (e.g. from libz3)
  • major increase in build time

I've enabled the build breaker for now and will merge now.

@amai2012 amai2012 merged commit e085d85 into danmar:main Dec 7, 2020
@amai2012 amai2012 deleted the valgrind branch December 7, 2020 07:41
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants

X Tutup