From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-wm1-x32d.google.com (mail-wm1-x32d.google.com [IPv6:2a00:1450:4864:20::32d]) by sourceware.org (Postfix) with ESMTPS id 43D313858D38; Tue, 25 Aug 2020 02:29:23 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.3.2 sourceware.org 43D313858D38 Received: by mail-wm1-x32d.google.com with SMTP id y8so115865wma.0; Mon, 24 Aug 2020 19:29:23 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:subject:date:message-id:user-agent :mime-version; bh=uHZC7MmXTzktu340teCCIjFysImJAAv7WC1RN6Gfao8=; b=W47NypLZp/xlhLBsvCg1pGrTWSf2dS2imq9n30zFxtw69GN/UdsKIc47PVK0yizavl ZQuSNgKh4eDLGbvlJCs70rLhubuzHuuM91MSTjeq9eHwYCqA7TME8X2izrnKc14SxiwL UqDWiaYUlJl0lTFH+HZKJkHDu1dQmPZWhElVusUOa7ISPsmC7sEiUBDiBoFBFSGj3gaO vav512H0cXApn5Ka2i7/UqfEdnMnBh5vUuHhKLpPk3PAtzOTy7Wf+Lo7qVPKu+mGBhZg N/L04GbKSjBJiMzPt68XfXO9fhcRRGBmNdrdWLWi1Ww9bcN+CtdKzRb/5adZU7N6LVDG ODOw== X-Gm-Message-State: AOAM533Eu9XLhiJVMS1/f5taJk4aUjxip/8O7NUv4XJep46eyZSQ2oE+ Aq8CQpWt2Fr/q2mUh4PR/E0= X-Google-Smtp-Source: ABdhPJw8dCYGkzjEahxFXpGTE6T4DiYJGQVY84+ESUHuBIOlL8KE4BWzqzWlJYylibyuQeBlB54YSg== X-Received: by 2002:a1c:bc85:: with SMTP id m127mr1910402wmf.70.1598322562261; Mon, 24 Aug 2020 19:29:22 -0700 (PDT) Received: from ettard ([195.147.220.46]) by smtp.gmail.com with ESMTPSA id 1sm1298935wmi.40.2020.08.24.19.29.21 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 24 Aug 2020 19:29:21 -0700 (PDT) From: Gaius Mulley To: gdb-patches@sourceware.org, gdb@sourceware.org, Tom de Vries Subject: Patch: Fix for Bug 26372 [Modula-2] Parsing of multi-subscript arrays Date: Tue, 25 Aug 2020 03:29:20 +0100 Message-ID: <878se3xxtr.fsf@ettard> User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/26.1 (gnu/linux) MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="=-=-=" X-Spam-Status: No, score=-11.4 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, FREEMAIL_FROM, GIT_PATCH_0, RCVD_IN_DNSWL_NONE, SPF_HELO_NONE, SPF_PASS, TXREP autolearn=ham autolearn_force=no version=3.4.2 X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on server2.sourceware.org X-BeenThere: gdb-patches@sourceware.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Gdb-patches mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 25 Aug 2020 02:29:24 -0000 --=-=-= Content-Type: text/plain Hi Tom, here is a bugfix for Pr 26372 [Modula-2] Parsing of multi-subscript arrays. Also included is a dejagnu testcase. No extra regressions are caused on Debian GNU/Linux Buster amd64, is this ok to apply? regards, Gaius gdb/ChangeLog entry =================== 2020-08-25 Gaius Mulley * m2-exp.y: Rewrite array subscript rules to support multidimension array access. (ArgumentList) replaces non_empty_arglist. * testsuite/gdb.modula2/multidim.y: (New file). * testsuite/gdb.modula2/multidim.c: (New file). Patch ===== diff --git a/gdb/m2-exp.y b/gdb/m2-exp.y index 70a3d9c483..ea5c83e60a 100644 --- a/gdb/m2-exp.y +++ b/gdb/m2-exp.y @@ -293,21 +293,18 @@ set : '{' arglist '}' ; -/* Modula-2 array subscript notation [a,b,c...] */ -exp : exp '[' - /* This function just saves the number of arguments - that follow in the list. It is *not* specific to - function types */ - { pstate->start_arglist(); } - non_empty_arglist ']' %prec DOT - { write_exp_elt_opcode (pstate, MULTI_SUBSCRIPT); - write_exp_elt_longcst (pstate, - pstate->end_arglist()); - write_exp_elt_opcode (pstate, MULTI_SUBSCRIPT); } - ; - -exp : exp '[' exp ']' - { write_exp_elt_opcode (pstate, BINOP_SUBSCRIPT); } +/* Modula-2 array subscript notation [a,b,c...]. */ +exp : exp '[' ArgumentList ']' %prec DOT + { + if (pstate->arglist_len > 1) + { + write_exp_elt_opcode (pstate, MULTI_SUBSCRIPT); + write_exp_elt_longcst (pstate, pstate->arglist_len); + write_exp_elt_opcode (pstate, MULTI_SUBSCRIPT); + } + else + write_exp_elt_opcode (pstate, BINOP_SUBSCRIPT); + } ; exp : exp '(' @@ -321,24 +318,22 @@ exp : exp '(' write_exp_elt_opcode (pstate, OP_FUNCALL); } ; -arglist : - ; - -arglist : exp +/* Non empty argument list. */ +ArgumentList: + exp { pstate->arglist_len = 1; } +| ArgumentList ',' exp + { pstate->arglist_len++; } ; -arglist : arglist ',' exp %prec ABOVE_COMMA - { pstate->arglist_len++; } +arglist : ; -non_empty_arglist - : exp +arglist : exp { pstate->arglist_len = 1; } ; -non_empty_arglist - : non_empty_arglist ',' exp %prec ABOVE_COMMA +arglist : arglist ',' exp %prec ABOVE_COMMA { pstate->arglist_len++; } ; and simple testcase =================== --=-=-= Content-Type: application/gzip Content-Disposition: attachment; filename=gdb-testsuite.tar.gz Content-Transfer-Encoding: base64 Content-Description: multidimension test case for Modula-2 H4sIAMNrRF8AA+1WbU/bSBDma/0r5pJK5SVNbCcQ6VJOSjmgkSigEFShNKo29thZztn1rdfkIsR/ 7+wmBD5wpSiop5P2+bL27syzMzvjZ53G44bGQhcl19hI43F9KuMyY2FjWmaax3xajzbWhE/Ya7XM GLR3/cejb5/93Y2g2Q4Dv9VutXY3/GCvTQP46278MygLzRTARsp4WfzA7rn1/yka2zCY8AJMD0AR KZ5roNecKQ0ygeM/P9ZATxCOTy8hxnGZpqjqngcABzKfK55ONIR+6MORQoQLmegZUwhHshQx01yK GvREtPCwG+VKpopNzSaJcSmWLh2YyxIiJkBhzAut+LjUCFwDE3FDKqC+5Mnc8NAcsaOygWlU08KE eh/lMQpULIPzcpzxCE54hKJAYLS1mSkmGMPY8hiPfwu7A8hpXcENqoLeoXm/x5KwBlIZkk2mTeQK ZG78tijcOWRMP7g+nfxDjjFwYZknMqd8JkRIGc54lsEYoSwwKbOaoSBj+NIbfDq7HED39Aq+dPv9 7ungqkPGeiJpFW9wQcWnecaJmbJSTOg5BW8YPh/2Dz6RS/dj76Q3uKIU4Kg3OD28uICjsz504bzb H/QOLk+6fTi/7J+fXRzWAS7QhIWG4AcHnNga0SHGqBnPikXaV1TUgmLLYpiwG6TiRshvKDIGETXQ 84UzJCyTIrVJkvHDMVJovQSE1DUoKMQPE63z3xuN2WxWT0VZlyptZAuSovEHGW83PM+jz10TOxfU WMPAHw1Df9RZTd9IHntUdoRN87jl3Xp3nkfG3pRRlTbNBFhnXoPrzvI5orbRsA9+x+RsDmKT21fg 8AECM+7sbJlMFovXi8VrWgzNeL8IcOu9YUM+Gl6PyMTSdrw3C/qdfQg6S7M7GhdRbnUowDW+//R5 /cd/8vU05hn9D5utcKn/u0F7r0n6324GTaf/vwLVl+p49XVkvPo6Kl59BRGv/pSGV5/I/KUaXl1X wqtrKnj1ZQJucl5fwKuvo9+r1kt4ho//Ucz2JFywkjHDa0RZUBpi8WtT2OxyRWrNRbpsG8xwikLb vqOGLcXYdI5JjU58TlUjU2v42Uri+5B6QqQlS9F0MS4KYiTTXh/Ucyr+ZjazAT78PtP9kcDtMFdI EeM3CsRaGfJKQgdNG2oJy+UKvF1RvC1UZB9u7Z8X/F1y1HejO7i114BCXSoB7wN7RSXw21DRPSHt xTAycYulYY5KUfaVyFRRvNNAdmbLsUL2Vy7NDZZIWbG25tS4KNFwUmo2UqgUqG3uMF2eRAUq9e1Y YmHKB1Omo0l9myYLKnI0MeQry8c8tgDAvg6DWvh1ZEn2IQwXrkh7x6DkzDSJiimUrJyKylPuYS1Y ubcC657whNrLeC+J7t3/a4V1cHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcPh1+A7iHc4OACgAAA== --=-=-=--