8597748c42
...of87369ad7b8
"Use std::unreachable if available". (Unfortunately, Clang didn't warn about the thus meaningless uses of O3TL_UNREACHABLE, presumably due to <978cca9f49
> "Suppress all -Wunused-value warnings from macro body expansions.") (While at it, and as the expansion of O3TL_UNREACHABLE is now a nice full expression, wrap it in parentheses, as is common best practice for such macro definitions.) Change-Id: I555e6716ebb66172add686521446d90db6054845 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/130729 Tested-by: Jenkins Reviewed-by: Stephan Bergmann <sbergman@redhat.com>
48 lines
1.7 KiB
C++
48 lines
1.7 KiB
C++
/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4; fill-column: 100 -*- */
|
|
/*
|
|
* This file is part of the LibreOffice project.
|
|
*
|
|
* This Source Code Form is subject to the terms of the Mozilla Public
|
|
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
|
*/
|
|
|
|
#ifndef INCLUDED_O3TL_UNREACHABLE_HXX
|
|
#define INCLUDED_O3TL_UNREACHABLE_HXX
|
|
|
|
#include <sal/config.h>
|
|
|
|
#include <cassert>
|
|
#include <utility>
|
|
|
|
// An approximation of C++23 std::unreachable
|
|
// (<http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2021/p0627r6.pdf> "Function to mark
|
|
// unreachable code").
|
|
|
|
#if defined __cpp_lib_unreachable
|
|
|
|
#define O3TL_UNREACHABLE (::std::unreachable())
|
|
|
|
#else
|
|
|
|
// This fallback implementation is inspired by LLVM's LLVM_BUILTIN_UNREACHABLE
|
|
// (llvm/include/llvm/Support/Compiler.h).
|
|
|
|
#if defined _MSC_VER
|
|
#define O3TL_UNREACHABLE_detail __assume(false)
|
|
#else // assuming Clang or GCC with support for:
|
|
#define O3TL_UNREACHABLE_detail __builtin_unreachable()
|
|
#endif
|
|
|
|
#define O3TL_UNREACHABLE \
|
|
do \
|
|
{ \
|
|
assert(false); \
|
|
O3TL_UNREACHABLE_detail; \
|
|
} while (false)
|
|
|
|
#endif
|
|
|
|
#endif
|
|
|
|
/* vim:set shiftwidth=4 softtabstop=4 expandtab cinoptions=b1,g0,N-s cinkeys+=0=break: */
|