From 249226b450b88c423b8d395c220ddf5a00ef9332 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 | 22 +++++++++++++++------- 1 file changed, 15 insertions(+), 7 deletions(-) diff --git a/lisp/progmodes/cc-engine.el b/lisp/progmodes/cc-engine.el index 8b34daf03c2..0d9f0fec03b 100644 --- a/lisp/progmodes/cc-engine.el +++ b/lisp/progmodes/cc-engine.el @@ -12039,17 +12039,25 @@ c-in-knr-argdecl ;; Each time around the following checks one ;; declaration (which may contain several identifiers). (while (and - (consp (setq decl-or-cast + (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 - (c-syntactic-re-search-forward - ";" (+ (point) 1000) t))) + (memq (char-after) '(?\; ?\,)) + (goto-char (car decl-or-cast)) + (save-excursion + (setq semi-position+1 + (1+ (or + (c-syntactic-re-search-forward + ";" (point) 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