#endif
#endif
+#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
+
+
#endif
extern "C" {
#endif
-#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.
*
* This is used to implement gmx_fatal_collective() (which cannot be declared
* here, since it would bring with it mdrun-specific dependencies).
*/
-void
+gmx_noreturn void
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.
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__
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.
*
#define GMX_UTILITY_GMXASSERT_H
#include <boost/current_function.hpp>
-#include <boost/exception/detail/attribute_noreturn.hpp>
+
+#include "basedefinitions.h"
//! \addtogroup module_utility
//! \{
*
* \ingroup module_utility
*/
-BOOST_ATTRIBUTE_NORETURN
+gmx_noreturn
void assertHandler(const char *condition, const char *msg,
const char *func, const char *file, int line);