]> git.ipfire.org Git - thirdparty/binutils-gdb.git/blob - gdb/testsuite/gdb.base/varargs.c
Initial creation of sourceware repository
[thirdparty/binutils-gdb.git] / gdb / testsuite / gdb.base / varargs.c
1 /* varargs.c -
2 * (Added as part of fix for bug 15306 - "call" to varargs functions fails)
3 * This program is intended to let me try out "call" to varargs functions
4 * with varying numbers of declared args and various argument types.
5 * - RT 9/27/95
6 */
7
8 #include <stdio.h>
9 #include <stdarg.h>
10
11 int find_max1(int, ...);
12 int find_max2(int, int, ...);
13 double find_max_double(int, double, ...);
14
15 char ch;
16 unsigned char uc;
17 short s;
18 unsigned short us;
19 int a,b,c,d;
20 int max_val;
21 float fa,fb,fc,fd;
22 double da,db,dc,dd;
23 double dmax_val;
24
25 main() {
26 c = -1;
27 uc = 1;
28 s = -2;
29 us = 2;
30 a = 1;
31 b = 60;
32 max_val = find_max1(1, 60);
33 max_val = find_max1(a, b);
34 a = 3;
35 b = 1;
36 c = 4;
37 d = 2;
38 max_val = find_max1(3, 1, 4, 2);
39 max_val = find_max2(a, b, c, d);
40 da = 3.0;
41 db = 1.0;
42 dc = 4.0;
43 dd = 2.0;
44 dmax_val = find_max_double(3, 1.0, 4.0, 2.0);
45 dmax_val = find_max_double(a, db, dc, dd);
46 }
47
48 /* Integer varargs, 1 declared arg */
49
50 int find_max1(int num_vals, ...) {
51 int max_val = 0;
52 int x;
53 int i;
54 va_list argp;
55 va_start(argp, num_vals);
56 printf("find_max(%d,", num_vals);
57 for (i = 0; i < num_vals; i++) {
58 x = va_arg(argp, int);
59 if (max_val < x) max_val = x;
60 if (i < num_vals - 1)
61 printf(" %d,", x);
62 else
63 printf(" %d)", x);
64 }
65 printf(" returns %d\n", max_val);
66 return max_val;
67 }
68
69 /* Integer varargs, 2 declared args */
70
71 int find_max2(int num_vals, int first_val, ...) {
72 int max_val = 0;
73 int x;
74 int i;
75 va_list argp;
76 va_start(argp, first_val);
77 x = first_val;
78 if (max_val < x) max_val = x;
79 printf("find_max(%d, %d", num_vals, first_val);
80 for (i = 1; i < num_vals; i++) {
81 x = va_arg(argp, int);
82 if (max_val < x) max_val = x;
83 printf(", %d", x);
84 }
85 printf(") returns %d\n", max_val);
86 return max_val;
87 }
88
89 /* Double-float varargs, 2 declared args */
90
91 double find_max_double(int num_vals, double first_val, ...) {
92 double max_val = 0;
93 double x;
94 int i;
95 va_list argp;
96 va_start(argp, first_val);
97 x = first_val;
98 if (max_val < x) max_val = x;
99 printf("find_max(%f, %f", num_vals, first_val);
100 for (i = 1; i < num_vals; i++) {
101 x = va_arg(argp, double);
102 if (max_val < x) max_val = x;
103 printf(", %f", x);
104 }
105 printf(") returns %f\n", max_val);
106 return max_val;
107 }
108