Bug #79576 [Com]: "const TYPE *" is not parsed properly when type is not defined

From: Date: Fri, 08 May 2020 19:23:45 +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-226969@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: grzegorz129 at gmail dot com Reported by: grzegorz129 at gmail dot com Summary: "const TYPE *" is not parsed properly when type is not defined Status: Feedback 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: 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 *); #... } Previous Comments: ------------------------------------------------------------------------ [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

« previous php.bugs (#226969) next »