# This file is generated from configure.ac by Autoconf.  DO NOT EDIT!

if test "x$libc_cv_gcc___thread" != xyes; then
  as_fn_error $? "compiler support for __thread is required" "$LINENO" 5
fi

if test "x${libc_cv_visibility_attribute}" != xyes ||
   test "x${libc_cv_broken_visibility_attribute}" != xno; then
  as_fn_error $? "working compiler support for visibility attribute is required" "$LINENO" 5
fi

if test "x$libc_cv_asm_cfi_directives" != xyes; then
    case "$base_machine" in
    i386 | x86_64 | powerpc | s390)
      as_fn_error $? "CFI directive support in assembler is required" "$LINENO" 5 ;;
    *) ;;
  esac
fi


{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for forced unwind support" >&5
$as_echo_n "checking for forced unwind support... " >&6; }
if ${libc_cv_forced_unwind+:} false; then :
  $as_echo_n "(cached) " >&6
else
  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h.  */
#include <unwind.h>
int
main ()
{

struct _Unwind_Exception exc;
struct _Unwind_Context *context;
_Unwind_GetCFA (context)
  ;
  return 0;
}
_ACEOF
if ac_fn_c_try_compile "$LINENO"; then :
  libc_cv_forced_unwind=yes
else
  libc_cv_forced_unwind=no
fi
rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
fi
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $libc_cv_forced_unwind" >&5
$as_echo "$libc_cv_forced_unwind" >&6; }
if test $libc_cv_forced_unwind = yes; then
  $as_echo "#define HAVE_FORCED_UNWIND 1" >>confdefs.h

  old_CFLAGS="$CFLAGS"
  CFLAGS="$CFLAGS -Werror -fexceptions"
  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for C cleanup handling" >&5
$as_echo_n "checking for C cleanup handling... " >&6; }
if ${libc_cv_c_cleanup+:} false; then :
  $as_echo_n "(cached) " >&6
else
    cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h.  */

extern void some_function (void);
void cl (void *a) { }
int
main ()
{

  int a __attribute__ ((cleanup (cl)));
  some_function ()
  ;
  return 0;
}
_ACEOF
if ac_fn_c_try_compile "$LINENO"; then :
  libc_cv_c_cleanup=yes
else
  libc_cv_c_cleanup=no
fi
rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
fi
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $libc_cv_c_cleanup" >&5
$as_echo "$libc_cv_c_cleanup" >&6; }
  CFLAGS="$old_CFLAGS"
  if test $libc_cv_c_cleanup = no; then
    as_fn_error $? "the compiler must support C cleanup handling" "$LINENO" 5
  fi
else
  as_fn_error $? "forced unwind support is required" "$LINENO" 5
fi
