1 /*
2 * This file and its contents are supplied under the terms of the
3 * Common Development and Distribution License ("CDDL"), version 1.0.
4 * You may only use this file in accordance with the terms of version
5 * 1.0 of the CDDL.
6 *
7 * A full copy of the text of the CDDL should have accompanied this
8 * source. A copy of the CDDL is also available via the Internet at
9 * http://www.illumos.org/license/CDDL.
10 */
11
12 /*
13 * Copyright (c) 2019, Joyent, Inc.
14 * Copyright 2021 OmniOS Community Edition (OmniOSce) Association.
15 */
16
17 #include <sys/types.h>
18 #include <string.h>
19
20 /*
21 * Test various function and function pointer cases.
22 */
23
24 void
simple_func(void)25 simple_func(void)
26 {
27 }
28
29 void
one(int v)30 one(int v)
31 {
32 }
33
34 void
two(int v,const char * a)35 two(int v, const char *a)
36 {
37 }
38
39 void
three(int v,const char * a,float b)40 three(int v, const char *a, float b)
41 {
42 }
43
44 const char *
noarg(void)45 noarg(void)
46 {
47 return ("hello, world");
48 }
49
50 const char *
argument(uintptr_t base)51 argument(uintptr_t base)
52 {
53 return ((const char *)(base + 1));
54 }
55
56 void
vararg(const char * foo,...)57 vararg(const char *foo, ...)
58 {
59
60 }
61
62 uintptr_t
vararg_ret(const char * foo,...)63 vararg_ret(const char *foo, ...)
64 {
65 return ((uintptr_t)foo);
66 }
67
68 int
vla1(int n,int arr[n])69 vla1(int n, int arr[n])
70 {
71 return (arr[1]);
72 }
73
74 int
vla2(int n,int arr[n][n])75 vla2(int n, int arr[n][n])
76 {
77 return (arr[1][2]);
78 }
79
80 int
vla3(int n,int arr[n][7])81 vla3(int n, int arr[n][7])
82 {
83 return (arr[1][2]);
84 }
85
86 int
vla4(int n,int arr[23][n])87 vla4(int n, int arr[23][n])
88 {
89 return (arr[1][2]);
90 }
91
92 int
vla5(int a,int b,int arr[a][3][b])93 vla5(int a, int b, int arr[a][3][b])
94 {
95 return (arr[1][2][3]);
96 }
97
98 int
vla6(int a,int b,int arr[a][b][4])99 vla6(int a, int b, int arr[a][b][4])
100 {
101 return (arr[1][2][3]);
102 }
103
104 typedef int (*strfunc_t)(const char *, const char *);
105 typedef void (*vararg_t)(const char *, ...);
106
107 strfunc_t s = strcmp;
108 vararg_t v = vararg;
109