- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Hi!
I tried to use Intel Inspector (from XE 2015) with little success. The application I try to analyze uses boost threads and a boost spirit parser. Thread safety defines have been added (eg BOOST_SPIRIT_THREADSAFE).
The following example displays the problem. In normal Release/Debug builds the program will output :
$ build64/Debug/once_test.exe
construct()
construct()
If Intel Inspector XE 2015 is used with "Thread Error Analysis" the program fails with stack corruption during the execution of boost::call_once.
If Intel Inspector XE 2015 is used with "MemoryError Analysis" everything is ok.
Is this a bug? Why is it only triggered when using the "Thread Error Analysis" functionality?
Environment:
// Tools: // Windows 7 64bit // Intel Inspector XE 2015 // Visual Studio 2013 Update 4 // Boost 1.57.0: boost/thread/once.hpp
Thanks a lot in advance!
Bye Gunther
// Example:
#include <boost/thread/once.hpp> #include <iostream> #include <assert.h> // // Small example showing the problem of: // This example only crashes during analyzing runs with the Intel Inspector tool // // Tools: // Intel Inspector XE 2015 // Visual Studio 2013 Update 4 // Boost 1.57.0: boost/thread/once.hpp struct default_ctor { static void construct() { std::cout << "construct()" << std::endl; } }; // // trying the same without boost // but not reproducible namespace not_boost { struct once_flag { long status; long count; }; void call_once(once_flag& flag, void(*f)()) { assert(flag.status == 0); assert(flag.count == 0); f(); } // Same signature as boost::call_once but use my once_flag type template <typename Function> inline void call_once(Function func, once_flag& flag) { call_once(flag, func); } } int main(int argc, char* argv) { { static not_boost::once_flag constructed_ = {0}; // does not triggers the stack error not_boost::call_once(&default_ctor::construct, constructed_); } { static boost::once_flag constructed_ = {0}; // triggers error: the stack seems to be corrupted boost::call_once(&default_ctor::construct, constructed_); } return 0; }
- Tags:
- CC++
- Debugging
- Development Tools
- Fortran
- Intel® Inspector
- Optimization
- Parallel Computing
- Vectorization
Link Copied
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
I would like the test this using Intel Parallel Studio XE2013. Is there still a trial download available for it?
Edit:
Additional information:
When I switch the build to RelWithDebInfo or Release (+turning off optimizations)
Edit 2:
In fact:
It works if "Only __inline (/Ob1) option is set in the compiler settings. With this settings Inspector succeeds in Debug and Release builds.
Visual Studio 2013 C/C++ commandline is:
Debug.
/GS /TP /W3 /wd"4786" /wd"4250" /wd"4503" /Zc:wchar_t /I"opt\include\boost\boost-1_57" /Zi /Gm- /Od /Ob0 /Fd"once_test.dir\Debug\vc120.pdb" /D "WIN32" /D "_WINDOWS" /D "NOMINMAX" /D "BUILD_X64" /D "_DEBUG" /D "BOOST_ALL_NO_LIB" /D "CMAKE_INTDIR=\"Debug\"" /D "_MBCS" /errorReport:prompt /WX- /Zc:forScope /RTC1 /GR /Gd /MDd /Fa"Debug/" /EHsc /nologo /Fo"once_test.dir\Debug\" /Fp"once_test.dir\Debug\once_test.pch"
RelWithDebInfo:
/GS /TP /W3 /wd"4786" /wd"4250" /wd"4503" /Zc:wchar_t /I"opt\include\boost\boost-1_57" /Zi /Gm- /Od /Ob1 /Fd"once_test.dir\RelWithDebInfo\vc120.pdb" /D "WIN32" /D "_WINDOWS" /D "NOMINMAX" /D "BUILD_X64" /D "NDEBUG" /D "BOOST_ALL_NO_LIB" /D "CMAKE_INTDIR=\"RelWithDebInfo\"" /D "_MBCS" /errorReport:prompt /WX- /Zc:forScope /GR /Gd /MD /Fa"RelWithDebInfo/" /EHsc /nologo /Fo"once_test.dir\RelWithDebInfo\" /Fp"once_test.dir\RelWithDebInfo\once_test.pch"

- Subscribe to RSS Feed
- Mark Topic as New
- Mark Topic as Read
- Float this Topic for Current User
- Bookmark
- Subscribe
- Printer Friendly Page