From 9ea20ff4673e495759f222cb2cfb0c89b996ddef Mon Sep 17 00:00:00 2001 From: Roland Schulz Date: Fri, 5 Sep 2014 16:23:19 -0400 Subject: [PATCH] Fix build for external boost 1.56.0 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 --- src/gromacs/pbcutil/mshift.cpp | 2 +- src/gromacs/utility/basedefinitions.h | 21 ++++++++++++++++++ src/gromacs/utility/fatalerror.cpp | 2 +- src/gromacs/utility/fatalerror.h | 32 +++++---------------------- src/gromacs/utility/gmxassert.h | 5 +++-- 5 files changed, 31 insertions(+), 31 deletions(-) diff --git a/src/gromacs/pbcutil/mshift.cpp b/src/gromacs/pbcutil/mshift.cpp index 94dc35bd2b..fa47a80e1a 100644 --- a/src/gromacs/pbcutil/mshift.cpp +++ b/src/gromacs/pbcutil/mshift.cpp @@ -145,7 +145,7 @@ static void mk_igraph(t_graph *g, int ftype, t_ilist *il, } } -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); diff --git a/src/gromacs/utility/basedefinitions.h b/src/gromacs/utility/basedefinitions.h index faa4395328..4c554c5f83 100644 --- a/src/gromacs/utility/basedefinitions.h +++ b/src/gromacs/utility/basedefinitions.h @@ -207,4 +207,25 @@ typedef uint64_t gmx_uint64_t; #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 diff --git a/src/gromacs/utility/fatalerror.cpp b/src/gromacs/utility/fatalerror.cpp index 1dd7e79edd..f242e2d448 100644 --- a/src/gromacs/utility/fatalerror.cpp +++ b/src/gromacs/utility/fatalerror.cpp @@ -206,7 +206,7 @@ static void call_error_handler(const char *key, const char *file, int line, cons 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) { if (debug) { diff --git a/src/gromacs/utility/fatalerror.h b/src/gromacs/utility/fatalerror.h index 1430d18548..7d380bc419 100644 --- a/src/gromacs/utility/fatalerror.h +++ b/src/gromacs/utility/fatalerror.h @@ -53,28 +53,6 @@ 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. * @@ -140,9 +118,9 @@ set_gmx_error_handler(void (*func)(const char *msg)); * 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. @@ -165,8 +143,8 @@ gmx_fatal_mpi_va(int fatal_errno, const char *file, int line, gmx_bool bMaster, 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__ @@ -179,7 +157,7 @@ gmx_fatal(int fatal_errno, const char *file, int line, const char *fmt, ...) GMX 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. * diff --git a/src/gromacs/utility/gmxassert.h b/src/gromacs/utility/gmxassert.h index 0259b611f1..b47d9d0933 100644 --- a/src/gromacs/utility/gmxassert.h +++ b/src/gromacs/utility/gmxassert.h @@ -44,7 +44,8 @@ #define GMX_UTILITY_GMXASSERT_H #include -#include + +#include "basedefinitions.h" //! \addtogroup module_utility //! \{ @@ -100,7 +101,7 @@ namespace internal * * \ingroup module_utility */ -BOOST_ATTRIBUTE_NORETURN +gmx_noreturn void assertHandler(const char *condition, const char *msg, const char *func, const char *file, int line); -- 2.22.0