exception/detail/attribute_noreturn.hpp has been removed in 1.56. We
shouldn't have used a detail header in the first place. Use Gromacs
own noreturn attribute.
Also:
- rename GMX_ATTRIBUTE_NORETURN to gmx_noreturn to match unused,
restrict, and inline
- moved gmx_noreturn to basedefinitions.h
- defined gmx_noreturn for MSVC.
- always use attribute at the beginning not the end, to make it work
with MSVC (also is more consistent)
Change-Id: Ieaeec03182be9a9d248bb460dae389270e806045
-GMX_ATTRIBUTE_NORETURN static void g_error(int line, const char *file)
+gmx_noreturn static void g_error(int line, const char *file)
{
gmx_fatal(FARGS, "Tring to print non existant graph (file %s, line %d)",
file, line);
{
gmx_fatal(FARGS, "Tring to print non existant graph (file %s, line %d)",
file, line);
+#ifndef __has_feature
+/** For compatibility with non-clang compilers. */
+#define __has_feature(x) 0
+#endif
+
+/*! \def gmx_noreturn
+ * \brief
+ * Indicate that a function is not expected to return.
+ *
+ */
+#ifndef gmx_noreturn
+#if defined(__GNUC__) || __has_feature(attribute_analyzer_noreturn)
+#define gmx_noreturn __attribute__((noreturn))
+#elif defined (_MSC_VER)
+#define gmx_noreturn __declspec(noreturn)
+#else
+#define gmx_noreturn
+#endif
+#endif
+
+
gmx_error_handler(buf);
}
gmx_error_handler(buf);
}
-GMX_ATTRIBUTE_NORETURN static void do_exit(bool bMaster, bool bFinalize)
+gmx_noreturn static void do_exit(bool bMaster, bool bFinalize)
-#ifndef __has_feature
-/** For compatibility with non-clang compilers. */
-#define __has_feature(x) 0
-#endif
-
-/*! \def GMX_ATTRIBUTE_NORETURN
- * \brief
- * Indicate that a function is not expected to return.
- *
- * \todo
- * There are functions outside this header that need the same attribute.
- * This could be moved to a generic header and made it affect also compiler
- * code generation.
- */
-#ifndef GMX_ATTRIBUTE_NORETURN
-#if defined(__GNUC__) || __has_feature(attribute_analyzer_noreturn)
-#define GMX_ATTRIBUTE_NORETURN __attribute__((noreturn))
-#else
-#define GMX_ATTRIBUTE_NORETURN
-#endif
-#endif
-
/*! \brief
* Debug log file.
*
/*! \brief
* Debug log file.
*
* This is used to implement gmx_fatal_collective() (which cannot be declared
* here, since it would bring with it mdrun-specific dependencies).
*/
* This is used to implement gmx_fatal_collective() (which cannot be declared
* here, since it would bring with it mdrun-specific dependencies).
*/
gmx_fatal_mpi_va(int fatal_errno, const char *file, int line, gmx_bool bMaster,
gmx_fatal_mpi_va(int fatal_errno, const char *file, int line, gmx_bool bMaster,
- gmx_bool bFinalize, const char *fmt, va_list ap) GMX_ATTRIBUTE_NORETURN;
+ gmx_bool bFinalize, const char *fmt, va_list ap);
/*! \brief
* Fatal error reporting routine for \Gromacs.
/*! \brief
* Fatal error reporting routine for \Gromacs.
gmx_fatal(FARGS, fmt, ...);
\endcode
*/
gmx_fatal(FARGS, fmt, ...);
\endcode
*/
-void
-gmx_fatal(int fatal_errno, const char *file, int line, const char *fmt, ...) GMX_ATTRIBUTE_NORETURN;
+gmx_noreturn void
+gmx_fatal(int fatal_errno, const char *file, int line, const char *fmt, ...);
/** Helper macro to pass first three parameters to gmx_fatal(). */
#define FARGS 0, __FILE__, __LINE__
/** Helper macro to pass first three parameters to gmx_fatal(). */
#define FARGS 0, __FILE__, __LINE__
char *gmx_strerror(const char *key);
/** Implementation for gmx_error(). */
char *gmx_strerror(const char *key);
/** Implementation for gmx_error(). */
-void _gmx_error(const char *key, const char *msg, const char *file, int line) GMX_ATTRIBUTE_NORETURN;
+gmx_noreturn void _gmx_error(const char *key, const char *msg, const char *file, int line);
/*! \brief
* Alternative fatal error routine with canned messages.
*
/*! \brief
* Alternative fatal error routine with canned messages.
*
#define GMX_UTILITY_GMXASSERT_H
#include <boost/current_function.hpp>
#define GMX_UTILITY_GMXASSERT_H
#include <boost/current_function.hpp>
-#include <boost/exception/detail/attribute_noreturn.hpp>
+
+#include "basedefinitions.h"
//! \addtogroup module_utility
//! \{
//! \addtogroup module_utility
//! \{
*
* \ingroup module_utility
*/
*
* \ingroup module_utility
*/
-BOOST_ATTRIBUTE_NORETURN
void assertHandler(const char *condition, const char *msg,
const char *func, const char *file, int line);
void assertHandler(const char *condition, const char *msg,
const char *func, const char *file, int line);