From: Jean-Marc Lasgouttes Date: Mon, 9 Sep 2024 10:08:23 +0000 (+0200) Subject: Do not use lyxerr in from_ascii(char const *) X-Git-Url: https://git.lyx.org/gitweb/?a=commitdiff_plain;h=ed291f0d4fbc778229840a9ad830c2481aa60bbd;p=lyx.git Do not use lyxerr in from_ascii(char const *) This function is used a lot to initialize static docstrings. This is an issue in theory because lyxerr may not have been initialized in time. In practice of course, lyxerr will only be used when there is a non-ascii character in the parameter, which is really not supposed to happen. This gets rid of 75 coverity reports. --- diff --git a/src/support/docstring.cpp b/src/support/docstring.cpp index cbee18a20a..59e26298df 100644 --- a/src/support/docstring.cpp +++ b/src/support/docstring.cpp @@ -40,7 +40,7 @@ docstring const from_ascii(char const * ascii) char_type *d = &s[0]; while (--n >= 0) { d[n] = ascii[n]; - LATTEST(static_cast(ascii[n]) < 0x80); + LATTEST_STATIC(static_cast(ascii[n]) < 0x80); } } return s; diff --git a/src/support/lassert.cpp b/src/support/lassert.cpp index 3e594153cb..31ebfeb0d9 100644 --- a/src/support/lassert.cpp +++ b/src/support/lassert.cpp @@ -22,6 +22,7 @@ #include +#include #ifdef LYX_CALLSTACK_PRINTING #include @@ -55,6 +56,13 @@ void doAssert(char const * expr, char const * file, long line) } +void doAssertStatic(char const * expr, char const * file, long line) +{ + cerr << "ASSERTION " << expr << " VIOLATED IN " << file << ":" << line << endl; + BOOST_ASSERT(false); +} + + docstring formatHelper(docstring const & msg, char const * expr, char const * file, long line) { diff --git a/src/support/lassert.h b/src/support/lassert.h index b142cc2f59..58f299f7af 100644 --- a/src/support/lassert.h +++ b/src/support/lassert.h @@ -34,6 +34,11 @@ LATTEST(expr) continue with the usual program flow, but failure of expr still means that there is something that needs to be fixed. +LATTEST_STATIC(expr) + This is the same as macro LATTEST above, except + that it does not use lyxerr, so that it is suitable in static + variables initialization. + LASSERT(expr, escape) This macro should be used when a failure of expr is not compatible with continuing the ordinary program flow, but is something from which we can @@ -61,6 +66,7 @@ LAPPERR(expr) void doAssert(char const * expr, char const * file, long line); +void doAssertStatic(char const * expr, char const * file, long line); void doWarnIf(char const * expr, char const * file, long line); void doBufErr(char const * expr, char const * file, long line); void doAppErr(char const * expr, char const * file, long line); @@ -76,6 +82,9 @@ docstring printCallStack(); #define LATTEST(expr) \ if (expr) {} else { lyx::doAssert(#expr, __FILE__, __LINE__); } +#define LATTEST_STATIC(expr) \ + if (expr) {} else { lyx::doAssertStatic(#expr, __FILE__, __LINE__); } + #define LASSERT(expr, escape) \ if (expr) {} else { lyx::doAssert(#expr, __FILE__, __LINE__); escape; }