assert.h 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  1. /*
  2. * Copyright (c) 2010 Richard Braun.
  3. *
  4. * This program is free software: you can redistribute it and/or modify
  5. * it under the terms of the GNU General Public License as published by
  6. * the Free Software Foundation, either version 3 of the License, or
  7. * (at your option) any later version.
  8. *
  9. * This program is distributed in the hope that it will be useful,
  10. * but WITHOUT ANY WARRANTY; without even the implied warranty of
  11. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  12. * GNU General Public License for more details.
  13. *
  14. * You should have received a copy of the GNU General Public License
  15. * along with this program. If not, see <http://www.gnu.org/licenses/>.
  16. */
  17. #ifndef ASSERT_H
  18. #define ASSERT_H
  19. #define static_assert _Static_assert
  20. #ifdef NDEBUG
  21. /*
  22. * The assert() macro normally doesn't produce side effects when turned off,
  23. * but this may result in many "set but not used" warnings. Using sizeof()
  24. * silences these warnings without producing side effects.
  25. */
  26. #define assert(expression) ((void)sizeof(expression))
  27. #else /* NDEBUG */
  28. #include <kern/macros.h>
  29. #include <kern/panic.h>
  30. /*
  31. * Panic if the given expression is false.
  32. */
  33. #define assert(expression) \
  34. MACRO_BEGIN \
  35. if (unlikely(!(expression))) { \
  36. panic("assertion (%s) failed in %s:%d, function %s()", \
  37. __QUOTE(expression), __FILE__, __LINE__, __func__); \
  38. } \
  39. MACRO_END
  40. #endif /* NDEBUG */
  41. #endif /* ASSERT_H */