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