From 31c624797f5083bde9aaa56a21e7182150463f2e Mon Sep 17 00:00:00 2001 From: yyc12345 Date: Sun, 28 Sep 2025 22:02:54 +0800 Subject: [PATCH] revert: revert the delete of std::stacktrace in rust panic. - i revert previous changes because currently code have not been compiled in clang. --- src/CMakeLists.txt | 9 +++++++++ src/yycc/rust/panic.cpp | 11 ++++------- 2 files changed, 13 insertions(+), 7 deletions(-) diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index d2aba0d..41a729c 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -157,6 +157,15 @@ PUBLIC $<$:/Zc:__cplusplus> ) +# Fix GCC std::stacktrace link error +if (CMAKE_CXX_COMPILER_ID STREQUAL "GNU") + if (CMAKE_CXX_COMPILER_VERSION VERSION_GREATER_EQUAL 14) + target_link_libraries(YYCCommonplace PRIVATE stdc++exp) + else () + target_link_libraries(YYCCommonplace PRIVATE stdc++_libbacktrace) + endif () +endif () + # Install binary and headers install(TARGETS YYCCommonplace EXPORT YYCCommonplaceTargets diff --git a/src/yycc/rust/panic.cpp b/src/yycc/rust/panic.cpp index 37c671f..4296135 100644 --- a/src/yycc/rust/panic.cpp +++ b/src/yycc/rust/panic.cpp @@ -4,6 +4,7 @@ #include #include #include +#include #define TERMCOLOR ::yycc::carton::termcolor @@ -11,13 +12,6 @@ using namespace yycc::patch::stream; namespace yycc::rust::panic { - // TODO: - // I sadly remove the stacktrace feature for panic function. - // Because in GCC, it has link error (can be fixed by extra link option). - // In Clang, it even lack the whole header file. - // It seems that STL providers are not ready for this feature. So I decide remove it entirely. - // Once every STL probiders have ready for this, I will add it back. - void panic(const char* file, int line, const std::u8string_view& msg) { // Output message in stderr. auto& dst = std::cerr; @@ -29,6 +23,9 @@ namespace yycc::rust::panic { dst << "program paniked at " << std::quoted(file) << ":Ln" << line << std::endl; // User custom message dst << "note: " << msg << std::endl; + // Stacktrace message if we support it. + dst << "stacktrace: " << std::endl; + dst << std::stacktrace::current() << std::endl; // Restore color dst << TERMCOLOR::reset();