xref: /openbsd-src/gnu/usr.bin/binutils/gdb/gdb_assert.h (revision b725ae7711052a2233e31a66fefb8a752c388d7a)
1*b725ae77Skettenis /* GDB-friendly replacement for <assert.h>.
2*b725ae77Skettenis    Copyright 2000, 2001 Free Software Foundation, Inc.
3*b725ae77Skettenis 
4*b725ae77Skettenis    This file is part of GDB.
5*b725ae77Skettenis 
6*b725ae77Skettenis    This program is free software; you can redistribute it and/or modify
7*b725ae77Skettenis    it under the terms of the GNU General Public License as published by
8*b725ae77Skettenis    the Free Software Foundation; either version 2 of the License, or
9*b725ae77Skettenis    (at your option) any later version.
10*b725ae77Skettenis 
11*b725ae77Skettenis    This program is distributed in the hope that it will be useful,
12*b725ae77Skettenis    but WITHOUT ANY WARRANTY; without even the implied warranty of
13*b725ae77Skettenis    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14*b725ae77Skettenis    GNU General Public License for more details.
15*b725ae77Skettenis 
16*b725ae77Skettenis    You should have received a copy of the GNU General Public License
17*b725ae77Skettenis    along with this program; if not, write to the Free Software
18*b725ae77Skettenis    Foundation, Inc., 59 Temple Place - Suite 330,
19*b725ae77Skettenis    Boston, MA 02111-1307, USA.  */
20*b725ae77Skettenis 
21*b725ae77Skettenis #ifndef GDB_ASSERT_H
22*b725ae77Skettenis #define GDB_ASSERT_H
23*b725ae77Skettenis 
24*b725ae77Skettenis /* PRAGMATICS: "gdb_assert.h":gdb_assert() is a lower case (rather
25*b725ae77Skettenis    than upper case) macro since that provides the closest fit to the
26*b725ae77Skettenis    existing lower case macro <assert.h>:assert() that it is
27*b725ae77Skettenis    replacing. */
28*b725ae77Skettenis 
29*b725ae77Skettenis #define gdb_assert(expr)                                                      \
30*b725ae77Skettenis   ((void) ((expr) ? 0 :                                                       \
31*b725ae77Skettenis 	   (gdb_assert_fail (#expr, __FILE__, __LINE__, ASSERT_FUNCTION), 0)))
32*b725ae77Skettenis 
33*b725ae77Skettenis /* Version 2.4 and later of GCC define a magical variable `__PRETTY_FUNCTION__'
34*b725ae77Skettenis    which contains the name of the function currently being defined.
35*b725ae77Skettenis    This is broken in G++ before version 2.6.
36*b725ae77Skettenis    C9x has a similar variable called __func__, but prefer the GCC one since
37*b725ae77Skettenis    it demangles C++ function names.  */
38*b725ae77Skettenis #if (GCC_VERSION >= 2004)
39*b725ae77Skettenis #define ASSERT_FUNCTION		__PRETTY_FUNCTION__
40*b725ae77Skettenis #else
41*b725ae77Skettenis #if defined __STDC_VERSION__ && __STDC_VERSION__ >= 199901L
42*b725ae77Skettenis #define ASSERT_FUNCTION		__func__
43*b725ae77Skettenis #endif
44*b725ae77Skettenis #endif
45*b725ae77Skettenis 
46*b725ae77Skettenis /* This prints an "Assertion failed" message, aksing the user if they
47*b725ae77Skettenis    want to continue, dump core, or just exit.  */
48*b725ae77Skettenis #if defined (ASSERT_FUNCTION)
49*b725ae77Skettenis #define gdb_assert_fail(assertion, file, line, function)                      \
50*b725ae77Skettenis   internal_error (file, line, "%s: Assertion `%s' failed.",                   \
51*b725ae77Skettenis 		  function, assertion)
52*b725ae77Skettenis #else
53*b725ae77Skettenis #define gdb_assert_fail(assertion, file, line, function)                      \
54*b725ae77Skettenis   internal_error (file, line, "Assertion `%s' failed.",                       \
55*b725ae77Skettenis 		  assertion)
56*b725ae77Skettenis #endif
57*b725ae77Skettenis 
58*b725ae77Skettenis #endif /* gdb_assert.h */
59