• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 //===-- Safe nullptr check --------------------------------------*- C++ -*-===//
2 //
3 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4 // See https://llvm.org/LICENSE.txt for license information.
5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6 //
7 //===----------------------------------------------------------------------===//
8 
9 #ifndef LLVM_LIBC_SRC___SUPPORT_MACROS_NULL_CHECK_H
10 #define LLVM_LIBC_SRC___SUPPORT_MACROS_NULL_CHECK_H
11 
12 #include "src/__support/macros/config.h"
13 #include "src/__support/macros/optimization.h"
14 #include "src/__support/macros/sanitizer.h"
15 
16 #if defined(LIBC_ADD_NULL_CHECKS) && !defined(LIBC_HAS_SANITIZER)
17 #define LIBC_CRASH_ON_NULLPTR(ptr)                                             \
18   do {                                                                         \
19     if (LIBC_UNLIKELY((ptr) == nullptr))                                       \
20       __builtin_trap();                                                        \
21   } while (0)
22 #else
23 #define LIBC_CRASH_ON_NULLPTR(ptr)                                             \
24   do {                                                                         \
25   } while (0)
26 #endif
27 
28 #endif // LLVM_LIBC_SRC___SUPPORT_MACROS_NULL_CHECK_H
29