1// { dg-do assemble  }
2
3// Copyright (C) 1999 Free Software Foundation, Inc.
4// Contributed by Nathan Sidwell 4 Oct 1999 <nathan@acm.org>
5
6// Make sure we diagnose bad uses of va_arg
7
8#include <stdarg.h>
9
10struct X {int m;};
11struct Y : X {int m;};
12struct Z;   // { dg-error "" } forward decl
13void fn1(va_list args)
14{
15  int i = va_arg (args, int);
16  Y x = va_arg (args, Y);         // { dg-warning "" } cannot receive
17  Y y = va_arg (args, struct Y);  // { dg-warning "" } cannot receive
18  int &r = va_arg (args, int &);  // { dg-warning "" } cannot receive
19
20  Z z1 = va_arg (args, Z);        // { dg-error "" } incomplete
21  const Z &z2 = va_arg (args, Z);       // { dg-error "" } incomplete
22
23  va_arg (args, char);    // { dg-error "" } promote
24  va_arg (args, int []);  // { dg-error "" } promote
25  va_arg (args, int ());  // { dg-error "" } promote
26  va_arg (args, bool);    // { dg-error "" } promote
27}
28