# This file is generated from configure.in by Autoconf.  DO NOT EDIT!
 # Local configure fragment for sysdeps/ia64.

{ $as_echo "$as_me:$LINENO: checking if -g produces usable source locations for assembler-with-cpp" >&5
$as_echo_n "checking if -g produces usable source locations for assembler-with-cpp... " >&6; }
if test "${libc_cv_cpp_asm_debuginfo+set}" = set; then
  $as_echo_n "(cached) " >&6
else
  cat > conftest.S <<EOF
#include "confdefs.h"

/* comment on
   two lines */
	${libc_cv_dot_text}
	${libc_cv_asm_global_directive} foo
foo:
	/* Unfortunately this test only works for a real instruction,
	   not for any of the machine-independent pseudo-ops.
	   So we just have to assume everybody has a "nop".  */
	nop.b	0;;
	/* comment */
	nop.b	0;;
	/* comment */
	nop.b	0;;
EOF
if { ac_try='${CC-cc} $CPPFLAGS $ASFLAGS -g -c conftest.S 1>&5'
  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
  (eval $ac_try) 2>&5
  ac_status=$?
  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
  (exit $ac_status); }; } && {
   ac_pattern='conftest\.S'
   { ac_try='readelf --debug-dump=line conftest.o |
		   grep $ac_pattern 1>&5'
  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
  (eval $ac_try) 2>&5
  ac_status=$?
  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
  (exit $ac_status); }; }
  }; then
  libc_cv_cpp_asm_debuginfo=yes
else
  libc_cv_cpp_asm_debuginfo=no
fi
rm -f conftest*
fi
{ $as_echo "$as_me:$LINENO: result: $libc_cv_cpp_asm_debuginfo" >&5
$as_echo "$libc_cv_cpp_asm_debuginfo" >&6; }
if test $libc_cv_cpp_asm_debuginfo = yes; then
  cat >>confdefs.h <<\_ACEOF
#define HAVE_CPP_ASM_DEBUGINFO 1
_ACEOF

fi
