mirror of
https://github.com/boostorg/stacktrace.git
synced 2026-01-24 18:32:22 +00:00
Fix minor issues that are seen by tests and appeared after refactoring
This commit is contained in:
@@ -86,6 +86,7 @@ public:
|
||||
BOOST_STACKTRACE_FUNCTION bool operator==(const backend& rhs) const BOOST_NOEXCEPT;
|
||||
|
||||
BOOST_STACKTRACE_FUNCTION backend(const backend& b, void* memory) BOOST_NOEXCEPT;
|
||||
BOOST_STACKTRACE_FUNCTION backend& operator=(const backend& b) BOOST_NOEXCEPT;
|
||||
BOOST_STACKTRACE_FUNCTION ~backend() BOOST_NOEXCEPT;
|
||||
BOOST_STACKTRACE_FUNCTION std::size_t size() const BOOST_NOEXCEPT;
|
||||
};
|
||||
|
||||
@@ -22,6 +22,19 @@ backend::backend(const backend& b, void* memory) BOOST_NOEXCEPT
|
||||
);
|
||||
}
|
||||
|
||||
backend& backend::operator=(const backend& b) BOOST_NOEXCEPT {
|
||||
if (data_ == b.data_) {
|
||||
return *this;
|
||||
}
|
||||
|
||||
reinterpret_cast<backtrace_holder*>(data_)->~backtrace_holder();
|
||||
new(data_) backtrace_holder(
|
||||
b.impl()
|
||||
);
|
||||
|
||||
return *this;
|
||||
}
|
||||
|
||||
backend::~backend() BOOST_NOEXCEPT {
|
||||
reinterpret_cast<backtrace_holder*>(data_)->~backtrace_holder();
|
||||
}
|
||||
|
||||
@@ -46,6 +46,10 @@ backend::backend(const backend& b, void* memory) BOOST_NOEXCEPT
|
||||
: data_(memory)
|
||||
{}
|
||||
|
||||
backend& backend::operator=(const backend& b) BOOST_NOEXCEPT {
|
||||
return *this;
|
||||
}
|
||||
|
||||
backend::~backend() BOOST_NOEXCEPT {}
|
||||
|
||||
std::size_t backend::size() const BOOST_NOEXCEPT {
|
||||
|
||||
@@ -45,7 +45,7 @@ public:
|
||||
/// @brief Stores the current function call sequence inside the class.
|
||||
///
|
||||
/// @b Complexity: O(N) where N is call seaquence length, O(1) for noop backend.
|
||||
stacktrace() BOOST_NOEXCEPT
|
||||
BOOST_FORCEINLINE stacktrace() BOOST_NOEXCEPT
|
||||
: impl_()
|
||||
, hash_code_()
|
||||
, back_(&impl_, sizeof(impl_), hash_code_)
|
||||
@@ -60,9 +60,8 @@ public:
|
||||
|
||||
/// @b Complexity: O(1)
|
||||
stacktrace& operator=(const stacktrace& st) BOOST_NOEXCEPT {
|
||||
back_.~backend();
|
||||
hash_code_ = st.hash_code_;
|
||||
new (&back_) boost::stacktrace::detail::backend(st.back_, &impl_);
|
||||
back_ = back_;
|
||||
|
||||
return *this;
|
||||
}
|
||||
|
||||
@@ -29,28 +29,28 @@ void test_deeply_nested_namespaces() {
|
||||
ss << return_from_nested_namespaces();
|
||||
std::cout << ss.str() << '\n';
|
||||
BOOST_TEST(ss.str().find("main") != std::string::npos);
|
||||
std::cerr << "cerr 1\n";
|
||||
|
||||
#if defined(BOOST_STACKTRACE_DYN_LINK) || !defined(BOOST_STACKTRACE_USE_BACKTRACE)
|
||||
BOOST_TEST(ss.str().find("get_backtrace_from_nested_namespaces") != std::string::npos);
|
||||
#endif
|
||||
std::cerr << "cerr 2\n";
|
||||
|
||||
stacktrace ns1 = return_from_nested_namespaces();
|
||||
BOOST_TEST(ns1 != return_from_nested_namespaces()); // Different addresses in test_deeply_nested_namespaces() function
|
||||
std::cerr << "cerr 3\n";
|
||||
}
|
||||
|
||||
void test_nested() {
|
||||
std::cerr << "cerr 4\n";
|
||||
|
||||
std::pair<stacktrace, stacktrace> res = foo2(15);
|
||||
std::cerr << "cerr 5\n";
|
||||
|
||||
std::stringstream ss1, ss2;
|
||||
std::cerr << "cerr 6\n";
|
||||
|
||||
ss1 << res.first;
|
||||
ss2 << res.second;
|
||||
std::cout << "'" << ss1.str() << "'\n\n" << ss2.str() << std::endl;
|
||||
BOOST_TEST(!ss1.str().empty());
|
||||
BOOST_TEST(!ss2.str().empty());
|
||||
std::cerr << "cerr 7\n";
|
||||
|
||||
BOOST_TEST(ss1.str().find(" 0# ") != std::string::npos);
|
||||
BOOST_TEST(ss2.str().find(" 0# ") != std::string::npos);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user