[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Bug#186139: gcc-3.2: [alpha] va_start is off by one



Package: gcc-3.2
Version: 1:3.2.3-0pre6
Severity: normal

In the attached program, failing_func should return its first
variadic argument, but somehow it returns wrong_value instead.
The main function exits with code 0 if the result is correct.

I believe this is what causes Debian Bug#185973.

#include <stdarg.h>

struct va_like
{
  char *base;
  int offset;
};

static int
failing_func (int i1,
	      int i2,
	      int i3,
	      int i4,
	      int i5,
	      struct va_like teaser,
	      int wrong_value,
	      ...) 
{
  int ret;
  va_list ap;
  va_start (ap, wrong_value);
  ret = va_arg (ap, int);
  va_end (ap);
  return ret;
}

int
main (void)
{
  static struct va_like teaser;
  if (failing_func (0, /* i1 */
		    0, /* i2 */
		    0, /* i3 */
		    0, /* i4 */
		    0, /* i5 */
		    teaser,
		    1,
		    2) == 2)
    return 0;
  else
    return 1;
}
# 1 "6.c"
# 1 "<built-in>"
# 1 "<command line>"
# 1 "6.c"
# 1 "/usr/lib/gcc-lib/alpha-linux/3.2.3/include/stdarg.h" 1 3
# 43 "/usr/lib/gcc-lib/alpha-linux/3.2.3/include/stdarg.h" 3
typedef __builtin_va_list __gnuc_va_list;
# 110 "/usr/lib/gcc-lib/alpha-linux/3.2.3/include/stdarg.h" 3
typedef __gnuc_va_list va_list;
# 2 "6.c" 2

struct va_like
{
  char *base;
  int offset;
};

static int
failing_func (int i1,
              int i2,
              int i3,
              int i4,
              int i5,
              struct va_like teaser,
              int wrong_value,
              ...)
{
  int ret;
  va_list ap;
  __builtin_stdarg_start((ap),wrong_value);
  ret = __builtin_va_arg (ap, int);
  __builtin_va_end (ap);
  return ret;
}

int
main (void)
{
  static struct va_like teaser;
  if (failing_func (0,
                    0,
                    0,
                    0,
                    0,
                    teaser,
                    1,
                    2) == 2)
    return 0;
  else
    return 1;
}
Reading specs from /usr/lib/gcc-lib/alpha-linux/3.2.3/specs
Configured with: ../src/configure -v --enable-languages=c,c++,java,f77,proto,pascal,objc,ada --prefix=/usr --mandir=/usr/share/man --infodir=/usr/share/info --with-gxx-include-dir=/usr/include/c++/3.2 --enable-shared --with-system-zlib --enable-nls --without-included-gettext --enable-__cxa_atexit --enable-clocale=gnu --enable-java-gc=boehm --enable-objc-gc alpha-linux
Thread model: posix
gcc version 3.2.3 20030316 (Debian prerelease)
 /usr/lib/gcc-lib/alpha-linux/3.2.3/cpp0 -lang-c -v -D__GNUC__=3 -D__GNUC_MINOR__=2 -D__GNUC_PATCHLEVEL__=3 -D__GXX_ABI_VERSION=102 -D__gnu_linux__ -Dlinux -Dunix -D_LONGLONG -D__alpha__ -D__ELF__ -D__gnu_linux__ -D__linux__ -D__unix__ -D_LONGLONG -D__alpha__ -D__ELF__ -D__linux -D__unix -Asystem=linux -D__NO_INLINE__ -D__STDC_HOSTED__=1 -D__LANGUAGE_C__ -D__LANGUAGE_C -DLANGUAGE_C -Acpu=alpha -Amachine=alpha -D__alpha -D__alpha__ -D__alpha_ev4__ -Acpu=ev4 6.c 6.i
GNU CPP version 3.2.3 20030316 (Debian prerelease) (cpplib) (Alpha GNU/Linux for ELF)
ignoring nonexistent directory "/usr/alpha-linux/include"
#include "..." search starts here:
#include <...> search starts here:
 /usr/local/include
 /usr/lib/gcc-lib/alpha-linux/3.2.3/include
 /usr/include
End of search list.
 /usr/lib/gcc-lib/alpha-linux/3.2.3/cc1 -fpreprocessed 6.i -quiet -dumpbase 6.c -version -o 6.s
GNU CPP version 3.2.3 20030316 (Debian prerelease) (cpplib) (Alpha GNU/Linux for ELF)
GNU C version 3.2.3 20030316 (Debian prerelease) (alpha-linux)
	compiled by GNU C version 3.2.3 20030316 (Debian prerelease).
 as -no-mdebug -o 6.o 6.s
 /usr/lib/gcc-lib/alpha-linux/3.2.3/collect2 --eh-frame-hdr -m elf64alpha -O1 -dynamic-linker /lib/ld-linux.so.2 /usr/lib/gcc-lib/alpha-linux/3.2.3/../../../crt1.o /usr/lib/gcc-lib/alpha-linux/3.2.3/../../../crti.o /usr/lib/gcc-lib/alpha-linux/3.2.3/crtbegin.o -L/usr/lib/gcc-lib/alpha-linux/3.2.3 -L/usr/lib/gcc-lib/alpha-linux/3.2.3/../../.. 6.o -lgcc -lgcc_eh -lc -lgcc -lgcc_eh /usr/lib/gcc-lib/alpha-linux/3.2.3/crtend.o /usr/lib/gcc-lib/alpha-linux/3.2.3/../../../crtn.o
-- System Information:
Debian Release: testing/unstable
Architecture: alpha
Kernel: Linux Saastamoduuli 2.2.22 #5 Thu Dec 26 16:47:34 EET 2002 alpha
Locale: LANG=fi_FI@euro, LC_CTYPE=fi_FI@euro

Versions of packages gcc-3.2 depends on:
ii  binutils                2.13.90.0.18-1.2 The GNU assembler, linker and bina
ii  cpp-3.2                 1:3.2.3-0pre6    The GNU C preprocessor
ii  gcc-3.2-base            1:3.2.3-0pre6    The GNU Compiler Collection (base 
ii  libc6.1                 2.3.1-15         GNU C Library: Shared libraries an
ii  libgcc1                 1:3.2.3-0pre6    GCC support library

-- no debconf information


Reply to: