This is the mail archive of the gcc-bugs@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]

Bug in va_list/va_arg on PowerPC



bortzmeyer@yoko:~/tmp$   gcc -c test-va.c
test-va.c: In function `main':
test-va.c:7: incompatible types in assignment

bortzmeyer@yoko:~/tmp$   cat test-va.c 
#include <stdarg.h> 

int main () {

  va_list values;
  va_list args;
  values = va_arg(args,va_list);

}

[Output of gcc -E attached.]

The same code compiles fine on an i386, same version of gcc, same OS, and on 
an Alpha, same version of gcc, Tru64 OS.


[The actual code - the Java Virtual Machine kaffe - is much longer.]



The test machine is a Macintosh PowerPC G4 (PowerBook)

bortzmeyer@yoko:~/tmp$ uname -a
Linux yoko 2.2.15pre20 #1 Thu May 4 11:48:16 EDT 2000 ppc unknown

bortzmeyer@yoko:~/tmp$ gcc -v --save-temps  test-va.c 
Reading specs from /usr/lib/gcc-lib/powerpc-linux/2.95.2/specs
gcc version 2.95.2 20000313 (Debian GNU/Linux)
 /usr/lib/gcc-lib/powerpc-linux/2.95.2/cpp -lang-c -v -D__GNUC__=2 
-D__GNUC_MINOR__=95 -DPPC -D__ELF__ -Dpowerpc -D__PPC__ -D__ELF__ 
-D__powerpc__ -D__PPC -D__powerpc -Acpu(powerpc) -Amachine(powerpc) 
-D__CHAR_UNSIGNED__ -D_CALL_SYSV -D_BIG_ENDIAN -D__BIG_ENDIAN__ 
-Amachine(bigendian) -D_ARCH_PPC -D__unix__ -D__linux__ -Dunix -Dlinux 
-Asystem(unix) -Asystem(posix) test-va.c test-va.i
GNU CPP version 2.95.2 20000313 (Debian GNU/Linux) (PowerPC GNU/Linux)
#include "..." search starts here:
#include <...> search starts here:
 /usr/local/include
 /usr/lib/gcc-lib/powerpc-linux/2.95.2/include
 /usr/include
End of search list.
The following default directories have been omitted from the search path:
 /usr/lib/gcc-lib/powerpc-linux/2.95.2/../../../../include/g++-3
 /usr/lib/gcc-lib/powerpc-linux/2.95.2/../../../../powerpc-linux/include
End of omitted list.
 /usr/lib/gcc-lib/powerpc-linux/2.95.2/cc1 test-va.i -quiet -dumpbase 
test-va.c -version -o test-va.s
GNU C version 2.95.2 20000313 (Debian GNU/Linux) (powerpc-linux) compiled by 
GNU C version 2.95.2 20000313 (Debian GNU/Linux).
test-va.c: In function `main':
test-va.c:7: incompatible types in assignment

# 1 "test-va.c"
# 1 "/usr/lib/gcc-lib/powerpc-linux/2.95.2/include/stdarg.h" 1 3
 








































# 1 "/usr/lib/gcc-lib/powerpc-linux/2.95.2/include/va-ppc.h" 1 3
 


 
 







 



 

typedef struct __va_list_tag {
  unsigned char gpr;		 


  unsigned char fpr;		 


  char *overflow_arg_area;	 

  char *reg_save_area;		 
} __va_list[1], __gnuc_va_list[1];









 



 


typedef struct {
  long   __gp_save[8];		 
  double __fp_save[8];		 
} __va_regsave_t;

 
 









 









 





















 













# 192 "/usr/lib/gcc-lib/powerpc-linux/2.95.2/include/va-ppc.h" 3



 






# 255 "/usr/lib/gcc-lib/powerpc-linux/2.95.2/include/va-ppc.h" 3

# 42 "/usr/lib/gcc-lib/powerpc-linux/2.95.2/include/stdarg.h" 2 3

# 131 "/usr/lib/gcc-lib/powerpc-linux/2.95.2/include/stdarg.h" 3












 
 













# 175 "/usr/lib/gcc-lib/powerpc-linux/2.95.2/include/stdarg.h" 3


 




 

 

 

typedef __gnuc_va_list va_list;
























# 1 "test-va.c" 2


int main () {

  va_list values;
  va_list args;
  values = __extension__ (*({	register  va_list  *__ptr;	if ((__builtin_classify_type(*(  va_list   *)0) == 8)  && sizeof ( va_list ) < 16)	{	unsigned char __fpr = ( args )->fpr;	if (__fpr < 8)	{	__ptr = ((   va_list   *) (void *) (&(((__va_regsave_t *)	(  args  )->reg_save_area)->__fp_save[  __fpr ]))) ;	( args )->fpr = __fpr + 1;	}	else if (sizeof ( va_list ) == 8)	{	unsigned long __addr = (unsigned long) ((  args  )->overflow_arg_area );	__ptr = ( va_list  *)((__addr + 7) & -8);	(  args  )->overflow_arg_area  = (char *)(__ptr + 1);	}	else	{	 ;	}	}	else if ((__builtin_classify_type(*(  va_list   *)0) >= 12)  || (__builtin_classify_type(*(  va_list   *)0) == 8) )	{	unsigned char __gpr = ( args )->gpr;	if (__gpr < 8)	{	__ptr = * ((   va_list  *  *) (void *) (&(((__va_regsave_t *)	(  args  )->reg_save_area)->__gp_save[  __gpr ]))) ;	( args )->gpr = __gpr + 1;	}	else	{	 va_list  **__pptr = ( va_list  **) ((  args  )->overflow_arg_area );	__ptr = * __pptr;	(  args  )->overflow_!
 arg_area  = (char *) (__pptr + 1);	}	}	else	{	if (sizeof ( va_list ) == 8)	{	unsigned char __gpr = ( args )->gpr;	if (__gpr < 7)	{	__gpr += __gpr & 1;	__ptr = ((   va_list   *) (void *) (&(((__va_regsave_t *)	(  args  )->reg_save_area)->__gp_save[  __gpr ]))) ;	( args )->gpr = __gpr + 2;	}	else	{	unsigned long __addr = (unsigned long) ((  args  )->overflow_arg_area ); __ptr = ( va_list  *)((__addr + 7) & -8);	( args )->gpr = 8;	(  args  )->overflow_arg_area  = (char *)(__ptr + 1);	}	}	else if (sizeof ( va_list ) == 4)	{	unsigned char __gpr = ( args )->gpr;	if (__gpr < 8)	{	__ptr = ((   va_list   *) (void *) (&(((__va_regsave_t *)	(  args  )->reg_save_area)->__gp_save[  __gpr ]))) ;	( args )->gpr = __gpr + 1;	}	else	{	__ptr = ( va_list  *) (  args  )->overflow_arg_area ;	(  args  )->overflow_arg_area  = (char *)(__ptr + 1);	}	}	else	{	 ;	}	}	__ptr;	})) ;

}

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]