Bug #79576 [Com]: "const TYPE *" is not parsed properly when type is not defined
| From: | alexdowad@php.net | Date: | Wed, 17 Jun 2020 21:03:44 +0000 |
| Subject: | Bug #79576 [Com]: "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-227530@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
Comment by: alexdowad@php.net
Reported by: grzegorz129 at gmail dot com
Summary: "const TYPE *" is not parsed properly when type is
not defined
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:
Just hacked up a little patch which improves the error messages in this (and similar) cases.
I'm sure there are other cases which it doesn't cover, but anyways, I'll submit it
and see what the maintainers say.
Previous Comments:
------------------------------------------------------------------------
[2020-06-17 21:03:43] alexdowad@php.net
Just hacked up a little patch which improves the error messages in this (and similar) cases.
I'm sure there are other cases which it doesn't cover, but anyways, I'll submit it
and see what the maintainers say.
------------------------------------------------------------------------
[2020-05-09 12:16:55] cmb@php.net
This is closely related to bug #78253, if not a duplicate.
------------------------------------------------------------------------
[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