/* Fake libiberty.h for Bison.

   Copyright (C) 2002-2004, 2009-2012 Free Software Foundation, Inc.

   This program is free software: you can redistribute it and/or modify
   it under the terms of the GNU General Public License as published by
   the Free Software Foundation, either version 3 of the License, or
   (at your option) any later version.

   This program is distributed in the hope that it will be useful,
   but WITHOUT ANY WARRANTY; without even the implied warranty of
   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
   GNU General Public License for more details.

   You should have received a copy of the GNU General Public License
   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */


/* Bison depends on libiberty's implementation of bitsets, which
   requires a `libiberty.h' file.  This file provides the minimum
   services.  */

#ifndef BISON_LIBIBERTY_H_
# define BISON_LIBIBERTY_H_ 1

# ifndef __attribute__
#  if __GNUC__ < 2 || (__GNUC__ == 2 && __GNUC_MINOR__ < 8)
#   define __attribute__(x)
#  endif
# endif

# define ATTRIBUTE_UNUSED __attribute__ ((__unused__))

# include "xalloc.h"

#endif /* ! BISON_LIBIBERTY_H_ */
