Commit 99ed43a7 authored by Tudor Bosman's avatar Tudor Bosman Committed by Jordan DeLong

FOLLY_NORETURN

Summary: Seems like a good idea.

Test Plan: compiled all of folly

Reviewed By: delong.j@fb.com

FB internal diff: D783104
parent 34129f8f
...@@ -24,24 +24,25 @@ ...@@ -24,24 +24,25 @@
#include "folly/Conv.h" #include "folly/Conv.h"
#include "folly/Likely.h" #include "folly/Likely.h"
#include "folly/Portability.h"
namespace folly { namespace folly {
// Helper to throw std::system_error // Helper to throw std::system_error
void throwSystemError(int err, const char* msg) __attribute__((noreturn)); void throwSystemError(int err, const char* msg) FOLLY_NORETURN;
inline void throwSystemError(int err, const char* msg) { inline void throwSystemError(int err, const char* msg) {
throw std::system_error(err, std::system_category(), msg); throw std::system_error(err, std::system_category(), msg);
} }
// Helper to throw std::system_error from errno // Helper to throw std::system_error from errno
void throwSystemError(const char* msg) __attribute__((noreturn)); void throwSystemError(const char* msg) FOLLY_NORETURN;
inline void throwSystemError(const char* msg) { inline void throwSystemError(const char* msg) {
throwSystemError(errno, msg); throwSystemError(errno, msg);
} }
// Helper to throw std::system_error from errno and components of a string // Helper to throw std::system_error from errno and components of a string
template <class... Args> template <class... Args>
void throwSystemError(Args... args) __attribute__((noreturn)); void throwSystemError(Args... args) FOLLY_NORETURN;
template <class... Args> template <class... Args>
inline void throwSystemError(Args... args) { inline void throwSystemError(Args... args) {
throwSystemError(errno, folly::to<std::string>(args...)); throwSystemError(errno, folly::to<std::string>(args...));
......
...@@ -18,9 +18,10 @@ ...@@ -18,9 +18,10 @@
#define FOLLY_FORMATARG_H_ #define FOLLY_FORMATARG_H_
#include <stdexcept> #include <stdexcept>
#include "folly/Range.h"
#include "folly/Likely.h"
#include "folly/Conv.h" #include "folly/Conv.h"
#include "folly/Likely.h"
#include "folly/Portability.h"
#include "folly/Range.h"
namespace folly { namespace folly {
...@@ -71,7 +72,7 @@ struct FormatArg { ...@@ -71,7 +72,7 @@ struct FormatArg {
} }
template <typename... Args> template <typename... Args>
void error(Args&&... args) const __attribute__((noreturn)); void error(Args&&... args) const FOLLY_NORETURN;
/** /**
* Full argument string, as passed in to the constructor. * Full argument string, as passed in to the constructor.
*/ */
......
...@@ -60,4 +60,10 @@ struct MaxAlign { char c; } __attribute__((aligned)); ...@@ -60,4 +60,10 @@ struct MaxAlign { char c; } __attribute__((aligned));
# error Cannot define MaxAlign on this platform # error Cannot define MaxAlign on this platform
#endif #endif
#if defined(__clang__) || defined(__GNUC__)
# define FOLLY_NORETURN __attribute__((noreturn))
#else
# define FOLLY_NORETURN
#endif
#endif // FOLLY_PORTABILITY_H_ #endif // FOLLY_PORTABILITY_H_
...@@ -20,6 +20,7 @@ ...@@ -20,6 +20,7 @@
#include <glog/logging.h> #include <glog/logging.h>
#include "folly/Portability.h"
#include "folly/experimental/exception_tracer/StackTrace.h" #include "folly/experimental/exception_tracer/StackTrace.h"
#include "folly/experimental/exception_tracer/ExceptionAbi.h" #include "folly/experimental/exception_tracer/ExceptionAbi.h"
#include "folly/experimental/exception_tracer/ExceptionTracer.h" #include "folly/experimental/exception_tracer/ExceptionTracer.h"
...@@ -28,9 +29,9 @@ namespace __cxxabiv1 { ...@@ -28,9 +29,9 @@ namespace __cxxabiv1 {
extern "C" { extern "C" {
void __cxa_throw(void* thrownException, std::type_info* type, void __cxa_throw(void* thrownException, std::type_info* type,
void (*destructor)(void)) __attribute__((noreturn)); void (*destructor)(void)) FOLLY_NORETURN;
void* __cxa_begin_catch(void* excObj); void* __cxa_begin_catch(void* excObj);
void __cxa_rethrow(void) __attribute__((noreturn)); void __cxa_rethrow(void) FOLLY_NORETURN;
void __cxa_end_catch(void); void __cxa_end_catch(void);
} }
...@@ -45,10 +46,10 @@ pthread_once_t initialized = PTHREAD_ONCE_INIT; ...@@ -45,10 +46,10 @@ pthread_once_t initialized = PTHREAD_ONCE_INIT;
extern "C" { extern "C" {
typedef void (*CxaThrowType)(void*, std::type_info*, void (*)(void)) typedef void (*CxaThrowType)(void*, std::type_info*, void (*)(void))
__attribute__((noreturn)); FOLLY_NORETURN;
typedef void* (*CxaBeginCatchType)(void*); typedef void* (*CxaBeginCatchType)(void*);
typedef void (*CxaRethrowType)(void) typedef void (*CxaRethrowType)(void)
__attribute__((noreturn)); FOLLY_NORETURN;
typedef void (*CxaEndCatchType)(void); typedef void (*CxaEndCatchType)(void);
CxaThrowType orig_cxa_throw; CxaThrowType orig_cxa_throw;
...@@ -58,7 +59,7 @@ CxaEndCatchType orig_cxa_end_catch; ...@@ -58,7 +59,7 @@ CxaEndCatchType orig_cxa_end_catch;
} // extern "C" } // extern "C"
typedef void (*RethrowExceptionType)(std::exception_ptr) typedef void (*RethrowExceptionType)(std::exception_ptr)
__attribute__((noreturn)); FOLLY_NORETURN;
RethrowExceptionType orig_rethrow_exception; RethrowExceptionType orig_rethrow_exception;
void initialize() { void initialize() {
......
...@@ -27,10 +27,11 @@ ...@@ -27,10 +27,11 @@
#include <gflags/gflags.h> #include <gflags/gflags.h>
#include "folly/experimental/io/HugePages.h"
#include "folly/Format.h" #include "folly/Format.h"
#include "folly/Portability.h"
#include "folly/Range.h" #include "folly/Range.h"
#include "folly/ScopeGuard.h" #include "folly/ScopeGuard.h"
#include "folly/experimental/io/HugePages.h"
DEFINE_bool(cp, false, "Copy file"); DEFINE_bool(cp, false, "Copy file");
...@@ -38,7 +39,7 @@ using namespace folly; ...@@ -38,7 +39,7 @@ using namespace folly;
namespace { namespace {
void usage(const char* name) __attribute__((noreturn)); void usage(const char* name) FOLLY_NORETURN;
void usage(const char* name) { void usage(const char* name) {
std::cerr << folly::format( std::cerr << folly::format(
......
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