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: