Bug 22103 – importC: Parser accepts wrong syntax for array declarators

Status
RESOLVED
Resolution
FIXED
Severity
critical
Priority
P1
Component
dmd
Product
D
Version
D2
Platform
All
OS
All
Creation time
2021-07-06T00:01:36Z
Last change time
2021-07-07T15:23:11Z
Keywords
accepts-invalid, ImportC, pull, rejects-valid
Assigned to
No Owner
Creator
Iain Buclaw

Comments

Comment #0 by ibuclaw — 2021-07-06T00:01:36Z
Syntax in 6.7.6 is: --- direct-declarator [ type-qualifier-list(opt) assignment-expression(opt) ] direct-declarator [ static type-qualifier-list(opt) assignment-expression ] direct-declarator [ type-qualifier-list static assignment-expression ] direct-declarator [ type-qualifier-list(opt) * ] --- But CParser instead parses C code as if it is instead: --- direct-declarator [ assignment-expression(opt) ] type-qualifier-list(opt) direct-declarator [ static assignment-expression(opt) ] type-qualifier-list(opt) direct-declarator [ * assignment-expression(opt) ] type-qualifier-list(opt) --- E.g: This code is wrong, but dmd compiles it as valid. --- void test(int arr[4] const, int val); int main() { int array[4] const; test(array, 4); return 0; } --- Conversely, this code is correct, but dmd rejects it. --- void test(int arr[restrict 4], int val); int main() { int array[4]; test(array, 4); return 0; } --- Implementation detail (C11 6.7.6.2-1): The optional type-qualifiers and the keyword `static` shall appear only in a declaration of a function parameter with an array type, and then only in the outermost array type derivation. Meaning , this code should be rejected: --- void badparam1(int arr[4][restrict]); void badparam2(int arr[4][static 2]); int var[static 4]; typedef int carray[const]; --- etc...
Comment #1 by dlang-bot — 2021-07-06T01:54:06Z
@ibuclaw created dlang/dmd pull request #12816 "fix Issue 22103 - importC: Parser accepts wrong syntax for array declarators" fixing this issue: - fix Issue 22103 - importC: Parser accepts wrong syntax for array declarators https://github.com/dlang/dmd/pull/12816
Comment #2 by dlang-bot — 2021-07-07T15:23:11Z
dlang/dmd pull request #12816 "fix Issue 22103 - importC: Parser accepts wrong syntax for array declarators" was merged into master: - a51c8de611a15aac25f481c38d4d9e8ce2b0eb49 by Iain Buclaw: fix Issue 22103 - importC: Parser accepts wrong syntax for array declarators https://github.com/dlang/dmd/pull/12816