From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.org!not-for-mail From: Daniel Colascione Newsgroups: gmane.emacs.bugs Subject: bug#16585: c-invalidate-state-cache fails if called when narrowed Date: Tue, 28 Jan 2014 18:09:04 -0800 Message-ID: <52E862C0.3010608@dancol.org> NNTP-Posting-Host: plane.gmane.org Mime-Version: 1.0 Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit X-Trace: ger.gmane.org 1390961401 3247 80.91.229.3 (29 Jan 2014 02:10:01 GMT) X-Complaints-To: usenet@ger.gmane.org NNTP-Posting-Date: Wed, 29 Jan 2014 02:10:01 +0000 (UTC) Cc: Alan Mackenzie To: 16585@debbugs.gnu.org Original-X-From: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane.org@gnu.org Wed Jan 29 03:10:08 2014 Return-path: Envelope-to: geb-bug-gnu-emacs@m.gmane.org Original-Received: from lists.gnu.org ([208.118.235.17]) by plane.gmane.org with esmtp (Exim 4.69) (envelope-from ) id 1W8KbQ-0007ZT-BQ for geb-bug-gnu-emacs@m.gmane.org; Wed, 29 Jan 2014 03:10:08 +0100 Original-Received: from localhost ([::1]:40178 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1W8KbP-00033V-S8 for geb-bug-gnu-emacs@m.gmane.org; Tue, 28 Jan 2014 21:10:07 -0500 Original-Received: from eggs.gnu.org ([2001:4830:134:3::10]:49506) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1W8KbM-00032l-2Y for bug-gnu-emacs@gnu.org; Tue, 28 Jan 2014 21:10:05 -0500 Original-Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1W8KbK-0002z4-WE for bug-gnu-emacs@gnu.org; Tue, 28 Jan 2014 21:10:04 -0500 Original-Received: from debbugs.gnu.org ([140.186.70.43]:53921) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1W8KbK-0002y9-TA for bug-gnu-emacs@gnu.org; Tue, 28 Jan 2014 21:10:02 -0500 Original-Received: from Debian-debbugs by debbugs.gnu.org with local (Exim 4.80) (envelope-from ) id 1W8KbK-0005Ve-2I for bug-gnu-emacs@gnu.org; Tue, 28 Jan 2014 21:10:02 -0500 X-Loop: help-debbugs@gnu.org Resent-From: Daniel Colascione Original-Sender: "Debbugs-submit" Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Wed, 29 Jan 2014 02:10:01 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: report 16585 X-GNU-PR-Package: emacs X-GNU-PR-Keywords: X-Debbugs-Original-To: bug-emacs Original-Received: via spool by submit@debbugs.gnu.org id=B.139096137221134 (code B ref -1); Wed, 29 Jan 2014 02:10:01 +0000 Original-Received: (at submit) by debbugs.gnu.org; 29 Jan 2014 02:09:32 +0000 Original-Received: from localhost ([127.0.0.1]:39707 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.80) (envelope-from ) id 1W8Kap-0005Un-Bx for submit@debbugs.gnu.org; Tue, 28 Jan 2014 21:09:31 -0500 Original-Received: from eggs.gnu.org ([208.118.235.92]:47685) by debbugs.gnu.org with esmtp (Exim 4.80) (envelope-from ) id 1W8Kam-0005Ua-P6 for submit@debbugs.gnu.org; Tue, 28 Jan 2014 21:09:29 -0500 Original-Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1W8Kag-0002nn-CB for submit@debbugs.gnu.org; Tue, 28 Jan 2014 21:09:23 -0500 Original-Received: from lists.gnu.org ([2001:4830:134:3::11]:33611) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1W8Kag-0002nj-8r for submit@debbugs.gnu.org; Tue, 28 Jan 2014 21:09:22 -0500 Original-Received: from eggs.gnu.org ([2001:4830:134:3::10]:49398) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1W8Kaf-0002wC-43 for bug-gnu-emacs@gnu.org; Tue, 28 Jan 2014 21:09:22 -0500 Original-Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1W8Kad-0002nK-RZ for bug-gnu-emacs@gnu.org; Tue, 28 Jan 2014 21:09:20 -0500 Original-Received: from dancol.org ([2600:3c01::f03c:91ff:fedf:adf3]:39512) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1W8Kad-0002mN-GR for bug-gnu-emacs@gnu.org; Tue, 28 Jan 2014 21:09:19 -0500 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=dancol.org; s=x; h=Content-Transfer-Encoding:Content-Type:Subject:CC:To:MIME-Version:From:Date:Message-ID; bh=Ty3WM9JhkOi8vdvmVxOvSWpGGSyAm6ynyD1mByBgwlU=; b=SXc1orOqvbZv/i17nn7Al+ePgvsdJCCT6cDUfF2KdOkZx8Zl/uX0OrQY7yT9Lz7ZGmXzlT1A8se1e1TL7wRmN9LaxJT6HAs2hHMieA6rMCdG+/S79BFoYf+PZFzjQnIMuGfR0WVvkx1QJI/dMMg8e0iY9eLgHerKUwzv+Z9GFERP6TS4mE2EdRruXH+L9fC4rWdcTLwXxFebVib5GEa0apqnOQwOgWGxtSE2BFqY/IDFkcIltGrv4d39QcgkaYGuWeb/B8HJ65gTZYQVJjNlzliCNALmYtCYG0bi5VUOmEjl7STyk/GpiUHFVEH+koUzMKTlasZh2v/57TNojXaeRA==; Original-Received: from [2620:0:1cfe:a1:2b5:6dff:fe05:24f5] by dancol.org with esmtpsa (TLS1.0:DHE_RSA_CAMELLIA_256_CBC_SHA1:256) (Exim 4.82) (envelope-from ) id 1W8KaW-0004cg-6M; Tue, 28 Jan 2014 18:09:12 -0800 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:24.0) Gecko/20100101 Thunderbird/24.2.0 X-detected-operating-system: by eggs.gnu.org: Error: Malformed IPv6 address (bad octet value). X-detected-operating-system: by eggs.gnu.org: Error: Malformed IPv6 address (bad octet value). X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.15 Precedence: list X-detected-operating-system: by eggs.gnu.org: GNU/Linux 3.x X-Received-From: 140.186.70.43 X-BeenThere: bug-gnu-emacs@gnu.org List-Id: "Bug reports for GNU Emacs, the Swiss army knife of text editors" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane.org@gnu.org Original-Sender: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane.org@gnu.org Xref: news.gmane.org gmane.emacs.bugs:84204 Archived-At: c-invalidate-state-cache can fail if called in a narrowed region: we end up calling c-clear-char-property for bob even if that's before point-min, causing remote-text-properties to raise (args-out-of-range 1 2). We get into this situation when expanding yasnippet snippets; we're calling c-invalidate-state-cache from c-before-change. To repro manually, first write this to some buffer. #include void foo() { } Then (this is important) run M-x c-mode. After starting the mode, move point to inside foo's body and eval (save-restriction (narrow-to-region (point-at-bol) (point-at-eol)) (c-invalidate-state-cache (point))). You should break into the debugger. The patch below seems correct and fixes the problem for me, but it'd be nice if Alan could take a look at it before I push it to trunk. The version of c-invalidate-state-cache in cc-mode trunk is very different. === modified file 'lisp/progmodes/cc-engine.el' --- lisp/progmodes/cc-engine.el 2014-01-19 12:32:47 +0000 +++ lisp/progmodes/cc-engine.el 2014-01-29 02:07:44 +0000 @@ -3318,15 +3318,17 @@ ;; of all parens in preprocessor constructs, except for any such construct ;; containing point. We can then call `c-invalidate-state-cache-1' without ;; worrying further about macros and template delimiters. - (c-with-<->-as-parens-suppressed - (if (and c-state-old-cpp-beg - (< c-state-old-cpp-beg here)) - (c-with-all-but-one-cpps-commented-out - c-state-old-cpp-beg - (min c-state-old-cpp-end here) - (c-invalidate-state-cache-1 here)) - (c-with-cpps-commented-out - (c-invalidate-state-cache-1 here))))) + (save-restriction + (widen) + (c-with-<->-as-parens-suppressed + (if (and c-state-old-cpp-beg + (< c-state-old-cpp-beg here)) + (c-with-all-but-one-cpps-commented-out + c-state-old-cpp-beg + (min c-state-old-cpp-end here) + (c-invalidate-state-cache-1 here)) + (c-with-cpps-commented-out + (c-invalidate-state-cache-1 here)))))) (defmacro c-state-maybe-marker (place marker) ;; If PLACE is non-nil, return a marker marking it, otherwise nil.