root/maint/gnulib/build-aux/snippet/link-warning.h

/* [previous][next][first][last][top][bottom][index][help] */
   1 /* A C macro for emitting link time warnings.
   2    Copyright (C) 1995, 1997, 2000, 2002-2003, 2007, 2009-2021 Free Software
   3    Foundation, Inc.
   4 
   5    This program is free software: you can redistribute it and/or modify it
   6    under the terms of the GNU Lesser General Public License as published
   7    by the Free Software Foundation; either version 2 of the License, or
   8    (at your option) any later version.
   9 
  10    This program is distributed in the hope that it will be useful,
  11    but WITHOUT ANY WARRANTY; without even the implied warranty of
  12    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
  13    Lesser General Public License for more details.
  14 
  15    You should have received a copy of the GNU Lesser General Public License
  16    along with this program.  If not, see <https://www.gnu.org/licenses/>.  */
  17 
  18 #if @HAVE_FEATURES_H@
  19 # include <features.h> /* for __GLIBC__, __UCLIBC__ */
  20 #endif
  21 
  22 /* GL_LINK_WARNING("literal string") arranges to emit the literal string as
  23    a linker warning on most glibc systems.
  24    We use a linker warning rather than a preprocessor warning, because
  25    #warning cannot be used inside macros.  */
  26 #ifndef GL_LINK_WARNING
  27   /* This works on platforms with GNU ld and ELF object format.
  28      Testing __GLIBC__ is sufficient for asserting that GNU ld is in use.
  29      Testing __ELF__ guarantees the ELF object format.
  30      Testing __GNUC__ is necessary for the compound expression syntax.  */
  31 # if (defined __GLIBC__ || defined __UCLIBC__) && defined __ELF__ && defined __GNUC__
  32 #  define GL_LINK_WARNING(message) \
  33      GL_LINK_WARNING1 (__FILE__, __LINE__, message)
  34 #  define GL_LINK_WARNING1(file, line, message) \
  35      GL_LINK_WARNING2 (file, line, message)  /* macroexpand file and line */
  36 #  define GL_LINK_WARNING2(file, line, message) \
  37      GL_LINK_WARNING3 (file ":" #line ": warning: " message)
  38 #  define GL_LINK_WARNING3(message) \
  39      ({ static const char warning[sizeof (message)]             \
  40           __attribute__ ((__unused__,                           \
  41                           __section__ (".gnu.warning"),         \
  42                           __aligned__ (1)))                     \
  43           = message "\n";                                       \
  44         (void)0;                                                \
  45      })
  46 # else
  47 #  define GL_LINK_WARNING(message) ((void) 0)
  48 # endif
  49 #endif

/* [previous][next][first][last][top][bottom][index][help] */