ignore-static-inside-array.patch (1849B)
- SPDX-FileCopyrightText: 2018 Petr Skocik <pskocik@gmail.com>
- SPDX-License-Identifier: LGPL-2.0-or-later
- From ef668aae1ee2b8bc904c50a13bf58df613b2f0b0 Mon Sep 17 00:00:00 2001
- From: Petr Skocik <pskocik@gmail.com>
- Date: Fri, 23 Mar 2018 13:19:58 +0100
- Subject: [PATCH 1/1] Don't fail on const/restrict/static/* inside []
- This patch makes tcc ignore them.
- Normally (as per the C standard), They should
- be only applicable inside parameter arrays
- and affect (const/restrict) the pointer the
- array gets converted to.
- [matz: fix formatting, add volatile handling, add testcase,
- add comment about above deficiency]
- ---
- tccgen.c | 19 +++++++++++++++++--
- tests/tests2/100_c99array-decls.c | 34 ++++++++++++++++++++++++++++++++++
- tests/tests2/100_c99array-decls.expect | 0
- 3 files changed, 51 insertions(+), 2 deletions(-)
- create mode 100644 tests/tests2/100_c99array-decls.c
- create mode 100644 tests/tests2/100_c99array-decls.expect
- diff --git tccgen.c tccgen.c
- index 7ed89ac..6ef40e4 100644
- --- tcc-0.9.27/tccgen.c
- +++ tcc-0.9.27/tccgen.c
- @@ -4335,8 +4335,23 @@ static int post_type(CType *type, AttributeDef *ad, int storage, int td)
- int saved_nocode_wanted = nocode_wanted;
- /* array definition */
- next();
- - if (tok == TOK_RESTRICT1)
- - next();
- + while (1) {
- + /* XXX The optional type-quals and static should only be accepted
- + in parameter decls. The '*' as well, and then even only
- + in prototypes (not function defs). */
- + switch (tok) {
- + case TOK_RESTRICT1: case TOK_RESTRICT2: case TOK_RESTRICT3:
- + case TOK_CONST1:
- + case TOK_VOLATILE1:
- + case TOK_STATIC:
- + case '*':
- + next();
- + continue;
- + default:
- + break;
- + }
- + break;
- + }
- n = -1;
- t1 = 0;
- if (tok != ']') {
- --
- 2.11.4.GIT