From 0515de23d84a48c57b456c6730f826c5d783b965 Mon Sep 17 00:00:00 2001 From: Olivier Certner Date: Wed, 3 May 2023 11:44:43 +0200 Subject: [PATCH] CC Mode: Fix K&R argument declaration misdetection after parenthesized type * lisp/progmodes/cc-engine.el (c-in-knr-argdecl): When trying to loop over candidate declarations (between the function declaration's identifier list's end and point) to check whether the names of their identifiers correspond with that of the identifier list, actually fail as soon as stumbling on something other than a declaration instead of silently succeeding, which causes some constructs to be erroneously recognized as K&R argument declarations. (Bug#63285) --- lisp/progmodes/cc-engine.el | 29 ++++++++++++++++++----------- 1 file changed, 18 insertions(+), 11 deletions(-) diff --git a/lisp/progmodes/cc-engine.el b/lisp/progmodes/cc-engine.el index 8b34daf03c2..27740b4903c 100644 --- a/lisp/progmodes/cc-engine.el +++ b/lisp/progmodes/cc-engine.el @@ -12039,17 +12039,24 @@ c-in-knr-argdecl ;; Each time around the following checks one ;; declaration (which may contain several identifiers). (while (and - (consp (setq decl-or-cast - (c-forward-decl-or-cast-1 - after-prec-token - nil ; Or 'arglist ??? - nil))) - (memq (char-after) '(?\; ?\,)) - (goto-char (car decl-or-cast)) - (save-excursion - (setq semi-position+1 - (c-syntactic-re-search-forward - ";" (+ (point) 1000) t))) + (or + (and + (consp (setq decl-or-cast + (c-forward-decl-or-cast-1 + after-prec-token + nil ; Or 'arglist ??? + nil))) + (memq (char-after) '(?\; ?\,)) + (goto-char (car decl-or-cast)) + (save-excursion + (setq semi-position+1 + (1+ (or + (c-syntactic-re-search-forward + ";" (+ (point) 1000) t) + (1- (point-max))))))) + ;; Can't parse declarations correctly, + ;; bail out. + (throw 'knr nil)) (c-do-declarators semi-position+1 t nil nil (lambda (id-start id-end _next _not-top -- 2.39.2