Bug #79576 [Fbk->Opn]: "const TYPE *" is not parsed properly when type is not defined
| From: | cmb@php.net | Date: | Sat, 09 May 2020 12:16:55 +0000 |
| Subject: | Bug #79576 [Fbk->Opn]: "const TYPE *" is not parsed properly when type is not defined | ||
| References: | 1 | Groups: | php.bugs |
| Request: | Send a blank email to php-bugs+get-226970@lists.php.net to get a copy of this message | ||
Edit report at https://bugs.php.net/bug.php?id=79576&edit=1
ID: 79576
Updated by: cmb@php.net
Reported by: grzegorz129 at gmail dot com
Summary: "const TYPE *" is not parsed properly when type is
not defined
-Status: Feedback
+Status: Open
Type: Bug
Package: *Extensibility Functions
Operating System: macOS 10.15.4
PHP Version: 7.4.5
Block user comment: N
Private report: N
New Comment:
This is closely related to bug #78253, if not a duplicate.
Previous Comments:
------------------------------------------------------------------------
[2020-05-08 19:23:45] grzegorz129 at gmail dot com
Yes, in this example (since I'm only slightly familiar with C) it took ma a longer while to
realize that the definition is correct but the type is missing.
However, another example where I've got the same error about unsupported type was much more
complex and really made me believe it's not supported (while in reality it was just missing
"netsnmp_variable_list" typedef):
struct tree {
#...
int (*printomat) (u_char **, size_t *, size_t *, int,
const netsnmp_variable_list *,
const struct enum_list *, const char *,
const char *);
#...
}
------------------------------------------------------------------------
[2020-05-08 19:11:45] nikic@php.net
Is the "bug" here that the error message should be improved? GCC reports this as:
> test.c:4:29: error: unknown type name âoidâ
which is more obvious.
------------------------------------------------------------------------
[2020-05-08 18:52:12] grzegorz129 at gmail dot com
Description:
------------
When parsing function declarations containing "const CUSTOM_TYPE *" the FFI modules
wrongly states that unsupported specifier combination was used. When type is properly defined the
FFI module is able to parse them without a problem.
Test script:
---------------
<?php
//Result: no error
\FFI::cdef('
typedef unsigned long u_long;
typedef u_long oid;
struct tree *get_tree(const oid *, size_t, struct tree *);
');
//vs.
//Result: FFI\ParserException: unsupported type specifier combination at line 1
\FFI::cdef('struct tree *get_tree(const oid *, size_t, struct tree *);');
Expected result:
----------------
FFI\ParserException: undefined C type 'oid'
Actual result:
--------------
FFI\ParserException: unsupported type specifier combination
------------------------------------------------------------------------
--
Edit this bug report at https://bugs.php.net/bug.php?id=79576&edit=1