2010-11-19 Jan Kratochvil <jan.kratochvil@redhat.com>
[deliverable/binutils-gdb.git] / gdb / gdb_assert.h
CommitLineData
6751bfc9 1/* GDB-friendly replacement for <assert.h>.
4c38e0a4
JB
2 Copyright (C) 2000, 2001, 2007, 2008, 2009, 2010
3 Free Software Foundation, Inc.
6751bfc9
MK
4
5 This file is part of GDB.
6
7 This program is free software; you can redistribute it and/or modify
8 it under the terms of the GNU General Public License as published by
a9762ec7 9 the Free Software Foundation; either version 3 of the License, or
6751bfc9
MK
10 (at your option) any later version.
11
12 This program is distributed in the hope that it will be useful,
13 but WITHOUT ANY WARRANTY; without even the implied warranty of
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 GNU General Public License for more details.
16
17 You should have received a copy of the GNU General Public License
a9762ec7 18 along with this program. If not, see <http://www.gnu.org/licenses/>. */
6751bfc9
MK
19
20#ifndef GDB_ASSERT_H
21#define GDB_ASSERT_H
22
38266776
AC
23/* PRAGMATICS: "gdb_assert.h":gdb_assert() is a lower case (rather
24 than upper case) macro since that provides the closest fit to the
25 existing lower case macro <assert.h>:assert() that it is
26 replacing. */
27
6751bfc9
MK
28#define gdb_assert(expr) \
29 ((void) ((expr) ? 0 : \
30 (gdb_assert_fail (#expr, __FILE__, __LINE__, ASSERT_FUNCTION), 0)))
31
32/* Version 2.4 and later of GCC define a magical variable `__PRETTY_FUNCTION__'
33 which contains the name of the function currently being defined.
34 This is broken in G++ before version 2.6.
35 C9x has a similar variable called __func__, but prefer the GCC one since
36 it demangles C++ function names. */
37#if (GCC_VERSION >= 2004)
38#define ASSERT_FUNCTION __PRETTY_FUNCTION__
39#else
40#if defined __STDC_VERSION__ && __STDC_VERSION__ >= 199901L
41#define ASSERT_FUNCTION __func__
6751bfc9
MK
42#endif
43#endif
44
f3574227 45/* This prints an "Assertion failed" message, asking the user if they
6751bfc9 46 want to continue, dump core, or just exit. */
93ec1121
AC
47#if defined (ASSERT_FUNCTION)
48#define gdb_assert_fail(assertion, file, line, function) \
e2e0b3e5 49 internal_error (file, line, _("%s: Assertion `%s' failed."), \
93ec1121
AC
50 function, assertion)
51#else
6751bfc9 52#define gdb_assert_fail(assertion, file, line, function) \
e2e0b3e5 53 internal_error (file, line, _("Assertion `%s' failed."), \
6751bfc9 54 assertion)
93ec1121 55#endif
6751bfc9 56
f3574227
DE
57/* The canonical form of gdb_assert (0).
58 MESSAGE is a string to include in the error message. */
59
60#if defined (ASSERT_FUNCTION)
61#define gdb_assert_not_reached(message) \
62 internal_error (__FILE__, __LINE__, "%s: %s", ASSERT_FUNCTION, _(message))
63#else
64#define gdb_assert_not_reached(message) \
65 internal_error (__FILE__, __LINE__, _(message))
66#endif
67
6751bfc9 68#endif /* gdb_assert.h */
This page took 0.892756 seconds and 4 git commands to generate.