OpenCores
URL https://opencores.org/ocsvn/openrisc/openrisc/trunk

Subversion Repositories openrisc

[/] [openrisc/] [tags/] [gnu-src/] [gcc-4.5.1/] [gcc-4.5.1-or32-1.0rc1/] [gcc/] [testsuite/] [gcc.dg/] [pr30457.c] - Diff between revs 298 and 338

Only display areas with differences | Details | Blame | View Log

Rev 298 Rev 338
/* PR 30457 warn about va_start(ap, invalid) */
/* PR 30457 warn about va_start(ap, invalid) */
/* { dg-do compile } */
/* { dg-do compile } */
/* { dg-options "-std=c99" } */
/* { dg-options "-std=c99" } */
 
 
/* Undefined by C99 7.15.1.4p4 (va_start):
/* Undefined by C99 7.15.1.4p4 (va_start):
   "If the parameter parmN is declared with the register storage
   "If the parameter parmN is declared with the register storage
    class, with a function or array type, or with a type that is
    class, with a function or array type, or with a type that is
    not compatible with the type that results after application of
    not compatible with the type that results after application of
    the default argument promotions, the behavior is undefined."  */
    the default argument promotions, the behavior is undefined."  */
 
 
#include <stdarg.h>
#include <stdarg.h>
 
 
void foo(register short paramN, ...)
void foo(register short paramN, ...)
{
{
  va_list ap;
  va_list ap;
 
 
  va_start(ap, paramN); /* { dg-warning "undefined behaviour when second parameter of 'va_start' is declared with 'register' storage" } */
  va_start(ap, paramN); /* { dg-warning "undefined behaviour when second parameter of 'va_start' is declared with 'register' storage" } */
 
 
  /* Undefined by C99 7.15.1.1p2:  */
  /* Undefined by C99 7.15.1.1p2:  */
  (void) va_arg(ap, char); /* { dg-warning "'char' is promoted to 'int' when passed through '...'" } */
  (void) va_arg(ap, char); /* { dg-warning "'char' is promoted to 'int' when passed through '...'" } */
  /* { dg-message "note: .so you should pass .int. not .char. to .va_arg.." "" { target *-*-* } 20 } */
  /* { dg-message "note: .so you should pass .int. not .char. to .va_arg.." "" { target *-*-* } 20 } */
  /* { dg-message "note: if this code is reached, the program will abort"  "" { target *-*-* } 20 } */
  /* { dg-message "note: if this code is reached, the program will abort"  "" { target *-*-* } 20 } */
 
 
  va_end(ap);
  va_end(ap);
}
}
 
 
 
 

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.