From 9852c76c2c881eba1843bb9e54f6b3257f53df1a Mon Sep 17 00:00:00 2001 From: Jean-Paul Chaput Date: Thu, 30 Sep 2021 20:06:48 +0200 Subject: [PATCH] Revert from std::regex to C POXIX regex. * Bug: In Hurricane::Backtrace(), the std::regex supplied by gcc 4.8.5 seems to be buggy. So, for now, to compile on my reference system, revert to C POSIX. --- hurricane/src/hurricane/Backtrace.cpp | 32 ++++++++++++++++++--------- 1 file changed, 21 insertions(+), 11 deletions(-) diff --git a/hurricane/src/hurricane/Backtrace.cpp b/hurricane/src/hurricane/Backtrace.cpp index bd3d4f50..9b742bcf 100644 --- a/hurricane/src/hurricane/Backtrace.cpp +++ b/hurricane/src/hurricane/Backtrace.cpp @@ -90,7 +90,8 @@ #include #include #include -#include +//#include +#include #include namespace boptions = boost::program_options; #include "hurricane/Backtrace.h" @@ -431,7 +432,6 @@ namespace Hurricane { : _stack() { if (not enabled) return; - if (_inConstructor) { _stack.push_back( "[BUG] Backtrace::Backtrace(): An error occurred in the backtace *istself*." ); _stack.push_back( "" ); @@ -458,18 +458,27 @@ namespace Hurricane { #endif #if (defined __linux__ || defined __FreeBSD__) - std::regex re ( "([^(]+)\\(([^+]+)\\+([^)]+)\\) \\[(.+)]" ); - std::cmatch match; - string homeDir = getHome(); + //std::regex re ( "([^(]+)\\(([^+]+)\\+([^)]+)\\) \\[(.+)]", std::regex::extended ); + //std::cmatch match; + regex_t re; + regmatch_t match[5]; + string homeDir = getHome(); + regcomp( &re, "([^(]+)\\(([^+]+)\\+([^)]+)\\) \\[(.+)]", REG_EXTENDED ); for ( size_t i=0 ; i" << demangled << ""; #ifdef HAVE_LIBBFD @@ -492,6 +501,7 @@ namespace Hurricane { _stack.push_back( symbols[i] ); } } + regfree( &re ); #else #ifdef __APPLE__ std::regex re ( "(\\d+)\\s+(\\S+)\\s+(\\S+)\\s+(\\S+)\\s+\\+\\s+(\\d+)" );