1 // PR c++/47022
2 // { dg-do compile }
3 // Suppress a warning that is irrelevant to the purpose of this test.
4 // { dg-options "-Wno-abi" { target arm_eabi } }
5
6 #include <cstdarg>
7
8 template <typename T>
9 void
f1(T * p,va_list ap)10 f1 (T *p, va_list ap)
11 {
12 *p = va_arg (ap, long double);
13 *p += va_arg (ap, double);
14 }
15
16 template <typename T>
17 void
f2(T * p,va_list ap)18 f2 (T *p, va_list ap)
19 {
20 *p = __real__ va_arg (ap, _Complex int);
21 *p += __imag__ va_arg (ap, _Complex double);
22 *p += __imag__ va_arg (ap, _Complex long double);
23 }
24
25 template <typename T>
26 void
f3(T * p,va_list ap)27 f3 (T *p, va_list ap)
28 {
29 *p = va_arg (ap, T);
30 }
31
32 void
foo(int x,va_list ap)33 foo (int x, va_list ap)
34 {
35 if (x == 0)
36 {
37 long double ld;
38 f1 (&ld, ap);
39 }
40 else if (x == 1)
41 {
42 int i;
43 f2 (&i, ap);
44 }
45 else if (x == 2)
46 {
47 long double ld;
48 f3 (&ld, ap);
49 }
50 else if (x == 3)
51 {
52 _Complex double cd;
53 f3 (&cd, ap);
54 }
55 }
56