Crash with Visual Studio 2015 (Update 3)
IceflowRE opened this issue · comments
Tested with 70a7b53
/OPT:NOICF
is set.
main.cpp
// # define _ITERATOR_DEBUG_LEVEL 0
#include "sigslot.h"
#include <iostream>
void f() { std::cout << "free function\n"; }
struct s {
void m() { std::cout << "member function\n"; }
static void sm() { std::cout << "static member function\n"; }
};
struct o {
void operator()() { std::cout << "function object\n"; }
};
int main() {
s d;
auto lambda = []() { std::cout << "lambda\n"; };
auto gen_lambda = [](auto && ... /*a*/) { std::cout << "generic lambda\n"; };
// declare a signal instance with no arguments
sigslot::signal<> sig;
// sigslot::signal will connect to any callable provided it has compatible
// arguments. Here are diverse examples
sig.connect(f);
sig.connect(&s::m, &d);
sig.connect(&s::sm);
sig.connect(o());
sig.connect(lambda);
sig.connect(gen_lambda);
// emit a signal
sig();
return 0;
}
> ConsoleApplication1.exe!std::_Iterator_base12::_Adopt(const std::_Container_base12 * _Parent) Line 166 C++
ConsoleApplication1.exe!std::_Vector_const_iterator<std::_Vector_val<std::_Simple_types<sigslot::signal_base<std::mutex>::group_type> > >::_Vector_const_iterator<std::_Vector_val<std::_Simple_types<sigslot::signal_base<std::mutex>::group_type> > >(sigslot::signal_base<std::mutex>::group_type * _Parg, const std::_Container_base12 * _Pvector) Line 48 C++
ConsoleApplication1.exe!std::_Vector_iterator<std::_Vector_val<std::_Simple_types<sigslot::signal_base<std::mutex>::group_type> > >::_Vector_iterator<std::_Vector_val<std::_Simple_types<sigslot::signal_base<std::mutex>::group_type> > >(sigslot::signal_base<std::mutex>::group_type * _Parg, const std::_Container_base12 * _Pvector) Line 314 C++
ConsoleApplication1.exe!std::vector<sigslot::signal_base<std::mutex>::group_type,std::allocator<sigslot::signal_base<std::mutex>::group_type> >::begin() Line 1058 C++
ConsoleApplication1.exe!sigslot::signal_base<std::mutex>::add_slot(std::shared_ptr<sigslot::detail::slot_base<> > && s) Line 1460 C++
ConsoleApplication1.exe!sigslot::signal_base<std::mutex>::connect<void (__cdecl&)(void)>(void(*)() c, int gid) Line 1148 C++
ConsoleApplication1.exe!main() Line 26 C++
After adding # define _ITERATOR_DEBUG_LEVEL 0
it crashs somewhere else:
> ucrtbased.dll!_free_dbg(void * block, int block_use) Line 1026 C++
ConsoleApplication1.exe!operator delete(void * block) Line 21 C++
ConsoleApplication1.exe!std::_Deallocate(void * _Ptr, unsigned __int64 _Count, unsigned __int64 _Sz) Line 133 C++
ConsoleApplication1.exe!std::allocator<sigslot::signal_base<std::mutex>::group_type>::deallocate(sigslot::signal_base<std::mutex>::group_type * _Ptr, unsigned __int64 _Count) Line 721 C++
ConsoleApplication1.exe!std::_Wrap_alloc<std::allocator<sigslot::signal_base<std::mutex>::group_type> >::deallocate(sigslot::signal_base<std::mutex>::group_type * _Ptr, unsigned __int64 _Count) Line 988 C++
ConsoleApplication1.exe!std::vector<sigslot::signal_base<std::mutex>::group_type,std::allocator<sigslot::signal_base<std::mutex>::group_type> >::_Reallocate(unsigned __int64 _Count) Line 1619 C++
ConsoleApplication1.exe!std::vector<sigslot::signal_base<std::mutex>::group_type,std::allocator<sigslot::signal_base<std::mutex>::group_type> >::_Reserve(unsigned __int64 _Count) Line 1633 C++
ConsoleApplication1.exe!std::vector<sigslot::signal_base<std::mutex>::group_type,std::allocator<sigslot::signal_base<std::mutex>::group_type> >::emplace_back<sigslot::signal_base<std::mutex>::group_type>(sigslot::signal_base<std::mutex>::group_type && <_Val_0>) Line 928 C++
ConsoleApplication1.exe!std::vector<sigslot::signal_base<std::mutex>::group_type,std::allocator<sigslot::signal_base<std::mutex>::group_type> >::emplace<sigslot::signal_base<std::mutex>::group_type>(std::_Vector_const_iterator<std::_Vector_val<std::_Simple_types<sigslot::signal_base<std::mutex>::group_type> > > _Where, sigslot::signal_base<std::mutex>::group_type && <_Val_0>) Line 945 C++
ConsoleApplication1.exe!std::vector<sigslot::signal_base<std::mutex>::group_type,std::allocator<sigslot::signal_base<std::mutex>::group_type> >::insert(std::_Vector_const_iterator<std::_Vector_val<std::_Simple_types<sigslot::signal_base<std::mutex>::group_type> > > _Where, sigslot::signal_base<std::mutex>::group_type && _Val) Line 920 C++
ConsoleApplication1.exe!sigslot::signal_base<std::mutex>::add_slot(std::shared_ptr<sigslot::detail::slot_base<> > && s) Line 1467 C++
ConsoleApplication1.exe!sigslot::signal_base<std::mutex>::connect<void (__cdecl&)(void)>(void(*)() c, int gid) Line 1148 C++
ConsoleApplication1.exe!main() Line 26 C++
I cannot reproduce it on the oldest MSVC version I have access to (MSVC 2017 15.4.4).
The backtrace is highly suspicious, it crashes while allocating some space in the vector. I think this particular compiler hardly qualifies as 2014 compliant, I would not be surprised if it were a compiler bug.
I cannot reproduce it on the oldest MSVC version I have access to (MSVC 2017 15.4.4).
The backtrace is highly suspicious, it crashes while allocating some space in the vector. I think this particular compiler hardly qualifies as 2014 compliant, I would not be surprised if it were a compiler bug.
Thinking the same.
Btw here: https://my.visualstudio.com/Downloads?q=visual%20studio%202015&wt.mc_id=o~msft~vscom~older-downloads
Ok, thanks for the link.
My sole Windows installation is the computer of my employer. I managed to get MSVC 2017 installed a few years ago but it is completely locked down, I cannot do anything about it.
In the mean time I updated the REAME to mention that MSVC 2017 and up are working. If this is fine with you I will declare this won't fix.