Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add Valgrind CI action #2921

Merged
merged 34 commits into from
Dec 7, 2020
Merged

Add Valgrind CI action #2921

merged 34 commits into from
Dec 7, 2020

Conversation

amai2012
Copy link
Collaborator

Add valgrind CI action.
Inspired by #2920

Verified

This commit was created on GitHub.com and signed with GitHub’s verified signature. The key has expired.
Install valgrind
Rename valgrind action
@amai2012 amai2012 changed the title Valgrind Add Valgrind CI action Nov 25, 2020

- name: Run valgrind
run: |
valgrind ./testrunner
Copy link
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
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
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
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
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
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

@@ -38,4 +38,4 @@ jobs:

- 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
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
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
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
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
Collaborator

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

@amai2012
Copy link
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
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
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
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
Collaborator

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

@amai2012
Copy link
Collaborator Author

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

@firewave
Copy link
Collaborator

Will take a look tomorrow.

@amai2012 amai2012 marked this pull request as ready for review November 30, 2020 18:54
Copy link
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
Collaborator

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

@amai2012
Copy link
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.

None yet

4 participants