Commit a5277405 by François Dumont

formatter.h (_Error_formatter::_M_function): New.

2018-05-08  François Dumont  <fdumont@gcc.gnu.org>

	* include/debug/formatter.h (_Error_formatter::_M_function): New.
	(_Error_formatter(const char*, unsigned int)): Adapt.
	(_Error_formatter::_M_at): Rename in...
	(_Error_formatter::_S_at): ...that and adapt.
	* include/debug/macros.h (_GLIBCXX_DEBUG_VERIFY_AT_F): New.
	(_GLIBCXX_DEBUG_VERIFY_AT, _GLIBCXX_DEBUG_VERIFY): Adapt.
	* src/c++11/debug.cc (_Error_formatter::_M_error): Render _M_function
	when available.

From-SVN: r260052
parent 9f171abd
2018-05-08 François Dumont <fdumont@gcc.gnu.org>
* include/debug/formatter.h (_Error_formatter::_M_function): New.
(_Error_formatter(const char*, unsigned int)): Adapt.
(_Error_formatter::_M_at): Rename in...
(_Error_formatter::_S_at): ...that and adapt.
* include/debug/macros.h (_GLIBCXX_DEBUG_VERIFY_AT_F): New.
(_GLIBCXX_DEBUG_VERIFY_AT, _GLIBCXX_DEBUG_VERIFY): Adapt.
* src/c++11/debug.cc (_Error_formatter::_M_error): Render _M_function
when available.
2018-05-08 Jonathan Wakely <jwakely@redhat.com> 2018-05-08 Jonathan Wakely <jwakely@redhat.com>
* include/bits/regex_automaton.h (_NFA_base::_M_paren_stack, _NFA): * include/bits/regex_automaton.h (_NFA_base::_M_paren_stack, _NFA):
......
...@@ -467,8 +467,10 @@ namespace __gnu_debug ...@@ -467,8 +467,10 @@ namespace __gnu_debug
#endif #endif
private: private:
_Error_formatter(const char* __file, unsigned int __line) _Error_formatter(const char* __file, unsigned int __line,
const char* __function)
: _M_file(__file), _M_line(__line), _M_num_parameters(0), _M_text(0) : _M_file(__file), _M_line(__line), _M_num_parameters(0), _M_text(0)
, _M_function(__function)
{ } { }
#if !_GLIBCXX_INLINE_VERSION #if !_GLIBCXX_INLINE_VERSION
...@@ -483,12 +485,13 @@ namespace __gnu_debug ...@@ -483,12 +485,13 @@ namespace __gnu_debug
_Parameter _M_parameters[__max_parameters]; _Parameter _M_parameters[__max_parameters];
unsigned int _M_num_parameters; unsigned int _M_num_parameters;
const char* _M_text; const char* _M_text;
const char* _M_function;
public: public:
static _Error_formatter& static _Error_formatter&
_M_at(const char* __file, unsigned int __line) _S_at(const char* __file, unsigned int __line, const char* __function)
{ {
static _Error_formatter __formatter(__file, __line); static _Error_formatter __formatter(__file, __line, __function);
return __formatter; return __formatter;
} }
}; };
......
...@@ -38,16 +38,20 @@ ...@@ -38,16 +38,20 @@
* the user error and where the error is reported. * the user error and where the error is reported.
* *
*/ */
#define _GLIBCXX_DEBUG_VERIFY_AT(_Condition,_ErrorMessage,_File,_Line) \ #define _GLIBCXX_DEBUG_VERIFY_AT_F(_Cond,_ErrMsg,_File,_Line,_Func) \
do \ do \
{ \ { \
if (! (_Condition)) \ if (! (_Cond)) \
__gnu_debug::_Error_formatter::_M_at(_File, _Line) \ __gnu_debug::_Error_formatter::_S_at(_File, _Line, _Func) \
._ErrorMessage._M_error(); \ ._ErrMsg._M_error(); \
} while (false) } while (false)
#define _GLIBCXX_DEBUG_VERIFY(_Condition,_ErrorMessage) \ #define _GLIBCXX_DEBUG_VERIFY_AT(_Cond,_ErrMsg,_File,_Line) \
_GLIBCXX_DEBUG_VERIFY_AT(_Condition,_ErrorMessage,__FILE__,__LINE__) _GLIBCXX_DEBUG_VERIFY_AT_F(_Cond,_ErrMsg,_File,_Line,__PRETTY_FUNCTION__)
#define _GLIBCXX_DEBUG_VERIFY(_Cond,_ErrMsg) \
_GLIBCXX_DEBUG_VERIFY_AT_F(_Cond, _ErrMsg, __FILE__, __LINE__, \
__PRETTY_FUNCTION__)
// Verify that [_First, _Last) forms a valid iterator range. // Verify that [_First, _Last) forms a valid iterator range.
#define __glibcxx_check_valid_range(_First,_Last) \ #define __glibcxx_check_valid_range(_First,_Last) \
......
...@@ -923,9 +923,9 @@ namespace ...@@ -923,9 +923,9 @@ namespace
continue; continue;
} }
if (*start != '%') if (!num_parameters || *start != '%')
{ {
// Normal char. // Normal char or no parameter to look for.
buf[bufindex++] = *start++; buf[bufindex++] = *start++;
continue; continue;
} }
...@@ -1034,6 +1034,15 @@ namespace __gnu_debug ...@@ -1034,6 +1034,15 @@ namespace __gnu_debug
if (ctx._M_max_length) if (ctx._M_max_length)
ctx._M_wordwrap = true; ctx._M_wordwrap = true;
if (_M_function)
{
print_literal(ctx, "In function:\n");
print_string(ctx, _M_function, nullptr, 0);
print_literal(ctx, "\n");
ctx._M_first_line = true;
print_literal(ctx, "\n");
}
print_literal(ctx, "Error: "); print_literal(ctx, "Error: ");
// Print the error message // Print the error message
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment