Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 3 additions & 2 deletions include/foonathan/memory/detail/align.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -24,8 +24,9 @@ namespace foonathan
constexpr std::size_t round_up_to_multiple_of_alignment(std::size_t size,
std::size_t alignment) noexcept
{
FOONATHAN_MEMORY_ASSERT(is_valid_alignment(alignment));
return (size + alignment - 1) & ~(alignment - 1);
return FOONATHAN_MEMORY_ASSERT_RETURN(
is_valid_alignment(alignment),
(size + alignment - 1) & ~(alignment - 1));
}

// returns the offset needed to align ptr for given alignment
Expand Down
7 changes: 7 additions & 0 deletions include/foonathan/memory/detail/assert.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,12 @@ namespace foonathan
__FILE__, __LINE__, __func__), \
true))

#define FOONATHAN_MEMORY_ASSERT_RETURN(Expr, Ret) \
((Expr) ? (Ret) \
: (detail::handle_failed_assert("Assertion \"" #Expr "\" failed", __FILE__, \
__LINE__, "some constexpr"), \
(Ret)))

#define FOONATHAN_MEMORY_UNREACHABLE(Msg) \
detail::handle_failed_assert("Unreachable code reached: " Msg, __FILE__, __LINE__, __func__)

Expand All @@ -45,6 +51,7 @@ namespace foonathan
#elif !defined(FOONATHAN_MEMORY_ASSERT)
#define FOONATHAN_MEMORY_ASSERT(Expr)
#define FOONATHAN_MEMORY_ASSERT_MSG(Expr, Msg)
#define FOONATHAN_MEMORY_ASSERT_RETURN(Expr, Ret) (Ret)
#define FOONATHAN_MEMORY_UNREACHABLE(Msg) std::abort()
#define FOONATHAN_MEMORY_WARNING(Msg)
#endif
Expand Down
Loading