xref: /PHP-7.4/ext/ffi/tests/027.phpt (revision 54ecf57f)
1--TEST--
2FFI 027: Incomplete and variable length arrays
3--SKIPIF--
4<?php require_once('skipif.inc'); ?>
5--INI--
6ffi.enable=1
7--FILE--
8<?php
9try {
10	$p = FFI::new("int[*]");
11	echo "ok\n";
12} catch (Throwable $e) {
13	echo get_class($e) . ": " . $e->getMessage()."\n";
14}
15try {
16	FFI::cdef("static int (*foo)[*];");
17	echo "ok\n";
18} catch (Throwable $e) {
19	echo get_class($e) . ": " . $e->getMessage()."\n";
20}
21try {
22	FFI::cdef("typedef int foo[*];");
23	echo "ok\n";
24} catch (Throwable $e) {
25	echo get_class($e) . ": " . $e->getMessage()."\n";
26}
27try {
28	FFI::cdef("static void foo(int[*][*]);");
29	echo "ok\n";
30} catch (Throwable $e) {
31	echo get_class($e) . ": " . $e->getMessage()."\n";
32}
33try {
34	var_dump(FFI::sizeof(FFI::new("int[0]")));
35} catch (Throwable $e) {
36	echo get_class($e) . ": " . $e->getMessage()."\n";
37}
38try {
39	var_dump(FFI::sizeof(FFI::new("int[]")));
40} catch (Throwable $e) {
41	echo get_class($e) . ": " . $e->getMessage()."\n";
42}
43try {
44	var_dump(FFI::sizeof(FFI::cast("int[]", FFI::new("int[2]"))));
45} catch (Throwable $e) {
46	echo get_class($e) . ": " . $e->getMessage()."\n";
47}
48try {
49	FFI::cdef("struct _x {int a; int b[];};");
50	echo "ok\n";
51} catch (Throwable $e) {
52	echo get_class($e) . ": " . $e->getMessage()."\n";
53}
54try {
55	$f = FFI::cdef("typedef int(*foo)[];");
56	echo "ok\n";
57} catch (Throwable $e) {
58	echo get_class($e) . ": " . $e->getMessage()."\n";
59}
60try {
61	$f = FFI::cdef("typedef int foo[][2];");
62	echo "ok\n";
63} catch (Throwable $e) {
64	echo get_class($e) . ": " . $e->getMessage()."\n";
65}
66try {
67	$f = FFI::cdef("typedef int foo[];");
68	echo "ok\n";
69} catch (Throwable $e) {
70	echo get_class($e) . ": " . $e->getMessage()."\n";
71}
72try {
73	$f = FFI::cdef("static int foo(int[]);");
74	echo "ok\n";
75} catch (Throwable $e) {
76	echo get_class($e) . ": " . $e->getMessage()."\n";
77}
78?>
79--EXPECT--
80FFI\ParserException: '[*]' not allowed in other than function prototype scope at line 1
81FFI\ParserException: '[*]' not allowed in other than function prototype scope at line 1
82FFI\ParserException: '[*]' not allowed in other than function prototype scope at line 1
83ok
84FFI\Exception: Cannot instantiate FFI\CData of zero size
85FFI\ParserException: '[]' not allowed at line 1
86FFI\ParserException: '[]' not allowed at line 1
87ok
88ok
89ok
90ok
91ok
92