GNU bug report logs - #7722
24.0.50; Finding this C++ header file drops emacs into a infinite loop

Previous Next

Packages: emacs, cc-mode;

Reported by: Tassilo Horn <tassilo <at> member.fsf.org>

Date: Fri, 24 Dec 2010 08:23:01 UTC

Severity: serious

Found in version 24.0.50

Fixed in version 24.1

Done: Glenn Morris <rgm <at> gnu.org>

Bug is archived. No further changes may be made.

To add a comment to this bug, you must first unarchive it, by sending
a message to control AT debbugs.gnu.org, with unarchive 7722 in the body.
You can then email your comments to 7722 AT debbugs.gnu.org in the normal way.

Toggle the display of automated, internal messages from the tracker.

View this report as an mbox folder, status mbox, maintainer mbox


Report forwarded to owner <at> debbugs.gnu.org, bug-gnu-emacs <at> gnu.org:
bug#7722; Package emacs. (Fri, 24 Dec 2010 08:23:02 GMT) Full text and rfc822 format available.

Acknowledgement sent to Tassilo Horn <tassilo <at> member.fsf.org>:
New bug report received and forwarded. Copy sent to bug-gnu-emacs <at> gnu.org. (Fri, 24 Dec 2010 08:23:02 GMT) Full text and rfc822 format available.

Message #5 received at submit <at> debbugs.gnu.org (full text, mbox):

From: Tassilo Horn <tassilo <at> member.fsf.org>
To: bug-gnu-emacs <at> gnu.org
Subject: 24.0.50; Finding this C++ header file drops emacs into a infinite loop
Date: Fri, 24 Dec 2010 09:28:36 +0100
Orininally reported by Caligo <iteronvexor <at> gmail.com> in
gmane.emacs.help
(<AANLkTikee8kNAxp6+viq6KSVPzqr3-0w1WCw0i+1iY_b <at> mail.gmail.com>).  He
uses GNU Emacs 23.2.1 (x86_64-pc-linux-gnu, GTK+ Version 2.20.1), but
the bug in still in the current bzr trunk.

1. emacs -Q bug.hpp
2. emacs loops infinitely using 100% CPU resources

The offending file is that (according to the original reporter, the
spaces and empty lines are needed):

--8<---------------cut here---------------start------------->8---














































class ConversionConsole : public QWidget{


private:
  typedef boost::array<InputLine, 22> InputLines;



























  typedef cons<XYZ, cons<xyY, cons<Lab, cons<LCHab, cons<Luv, cons<LCHuv,
          cons<AdobeRGB, cons<AppleRGB, cons<BestRGB, cons<BetaRGB,
  	  cons<BruceRGB, cons<CIERGB, cons<ColorMatchRGB, cons<DonRGB4,
  	  cons<ECIRGB, cons<EktaSpacePS5, cons<NTSCRGB, cons<PAL_SECAMRGB,
  	  cons<ProPhotoRGB, cons<SMPTE_CRGB, cons<sRGB, cons<WideGamutRGB
  	  > > > > > > > > > > > > > > > > > > > > > > ColorSpaces;

};
--8<---------------cut here---------------end--------------->8---



In GNU Emacs 24.0.50.1 (x86_64-pc-linux-gnu)
 of 2010-12-21 on thinkpad
Windowing system distributor `The X.Org Foundation', version 11.0.10902902
configured using `configure  '--prefix=/usr' '--build=x86_64-pc-linux-gnu' '--host=x86_64-pc-linux-gnu' '--mandir=/usr/share/man' '--infodir=/usr/share/info' '--datadir=/usr/share' '--sysconfdir=/etc' '--localstatedir=/var/lib' '--libdir=/usr/lib64' '--program-suffix=-emacs-24' '--infodir=/usr/share/info/emacs-24' '--with-crt-dir=/usr/lib64' '--without-compress-info' '--with-sound' '--with-x' '--without-gconf' '--with-xml2' '--without-toolkit-scroll-bars' '--with-gif' '--with-jpeg' '--with-png' '--with-rsvg' '--with-tiff' '--with-xpm' '--with-imagemagick' '--with-xft' '--with-libotf' '--with-m17n-flt' '--with-x-toolkit=no' '--without-hesiod' '--without-kerberos' '--without-kerberos5' '--with-gpm' '--with-dbus' '--with-gnutls' '--without-selinux' 'build_alias=x86_64-pc-linux-gnu' 'host_alias=x86_64-pc-linux-gnu' 'CFLAGS=-march=native -O2 -pipe' 'LDFLAGS=-Wl,-O1 -Wl,--as-needed' 'CPPFLAGS=''

Important settings:
  value of $LC_ALL: nil
  value of $LC_COLLATE: nil
  value of $LC_CTYPE: nil
  value of $LC_MESSAGES: nil
  value of $LC_MONETARY: nil
  value of $LC_NUMERIC: nil
  value of $LC_TIME: nil
  value of $LANG: en_US.UTF-8
  value of $XMODIFIERS: nil
  locale-coding-system: utf-8-unix
  default enable-multibyte-characters: t

Major mode: Message

Minor modes in effect:
  gnus-message-citation-mode: t
  diff-auto-refine-mode: t
  mml-mode: t
  global-auto-complete-mode: t
  auto-complete-mode: t
  yas/minor-mode: t
  recentf-mode: t
  window-number-meta-mode: t
  window-number-mode: t
  global-subword-mode: t
  subword-mode: t
  savehist-mode: t
  show-paren-mode: t
  tooltip-mode: t
  mouse-wheel-mode: t
  menu-bar-mode: t
  file-name-shadow-mode: t
  global-font-lock-mode: t
  font-lock-mode: t
  blink-cursor-mode: t
  auto-composition-mode: t
  auto-encryption-mode: t
  auto-compression-mode: t
  column-number-mode: t
  line-number-mode: t
  transient-mark-mode: t

Recent input:
u d i n g SPC t h e SPC b a d SPC <M-backspace> h p 
p SPC f i l e SPC u s i n g M-q SPC M - x SPC r e p 
<return> - e m M-/ SPC <backspace> z <backspace> ? 
<return> <return> b <tab> C-c C-c C-g C-g SPC SPC SPC 
SPC SPC SPC F <down> <down> <up> C-k <return> <up> 
<return> N e x t SPC t i b e <backspace> <backspace> 
m e , SPC s i m p l y SPC c o p y SPC t h e SPC c o 
n t e n t s SPC o f SPC t h e SPC b u g SPC r e p o 
r t SPC b u f f e r SPC i n t o SPC y o u r SPC e m 
a c <M-backspace> u s u a l SPC e m a i <backspace> 
i l SPC c l e i <backspace> <backspace> i o <backspace> 
e n t SPC a n d SPC s e n d SPC f r o m SPC t h a t 
. <down> <down> <down> C-a C-k C-k C-k C-k C-k C-k 
C-k C-k C-k C-k C-k C-k C-k C-k C-k C-k C-k C-k C-k 
C-k C-k C-k C-k C-k C-k C-k C-k C-k C-k C-k C-k C-k 
C-k C-k C-k C-k C-k C-k C-k C-k C-k C-k C-k C-k C-k 
C-k C-k C-k C-k C-k C-k C-k C-k C-k C-k C-k C-k C-k 
C-k C-k C-k C-k C-k C-k C-k C-k C-k C-k C-k C-k C-k 
C-k C-k C-k C-k C-k C-k <return> I ' l l SPC d o . 
<return> <return> b <tab> M-x r e p o <tab> r t <tab> 
<return>

Recent messages:
Sending...
Sending news via Gmane using nntp...
Wrote /home/horn/.gnus.d/News/archive/sent-postings/902
Sending...done
Quit [2 times]
Mark set [2 times]
kill-line: End of buffer [3 times]
[yas] snippet expanded.
[yas] snippet 3 exited.
Making completion list...

Load-path shadows:
~/repos/el/gnus/lisp/sha1 hides /usr/share/emacs/24.0.50/lisp/sha1
~/repos/el/gnus/lisp/password-cache hides /usr/share/emacs/24.0.50/lisp/password-cache
~/repos/el/gnus/lisp/md4 hides /usr/share/emacs/24.0.50/lisp/md4
~/repos/el/gnus/lisp/hex-util hides /usr/share/emacs/24.0.50/lisp/hex-util
~/repos/el/gnus/lisp/format-spec hides /usr/share/emacs/24.0.50/lisp/format-spec
~/repos/el/gnus/lisp/color hides /usr/share/emacs/24.0.50/lisp/color
~/repos/el/gnus/lisp/dns-mode hides /usr/share/emacs/24.0.50/lisp/textmodes/dns-mode
~/repos/el/org-mode/lisp/org-xoxo hides /usr/share/emacs/24.0.50/lisp/org/org-xoxo
~/repos/el/org-mode/lisp/org-wl hides /usr/share/emacs/24.0.50/lisp/org/org-wl
~/repos/el/org-mode/lisp/org-w3m hides /usr/share/emacs/24.0.50/lisp/org/org-w3m
~/repos/el/org-mode/lisp/org-vm hides /usr/share/emacs/24.0.50/lisp/org/org-vm
~/repos/el/org-mode/lisp/org-table hides /usr/share/emacs/24.0.50/lisp/org/org-table
~/repos/el/org-mode/lisp/org-taskjuggler hides /usr/share/emacs/24.0.50/lisp/org/org-taskjuggler
~/repos/el/org-mode/lisp/org-timer hides /usr/share/emacs/24.0.50/lisp/org/org-timer
~/repos/el/org-mode/lisp/org-src hides /usr/share/emacs/24.0.50/lisp/org/org-src
~/repos/el/org-mode/lisp/org-remember hides /usr/share/emacs/24.0.50/lisp/org/org-remember
~/repos/el/org-mode/lisp/org-rmail hides /usr/share/emacs/24.0.50/lisp/org/org-rmail
~/repos/el/org-mode/lisp/org-publish hides /usr/share/emacs/24.0.50/lisp/org/org-publish
~/repos/el/org-mode/lisp/org-plot hides /usr/share/emacs/24.0.50/lisp/org/org-plot
~/repos/el/org-mode/lisp/org-protocol hides /usr/share/emacs/24.0.50/lisp/org/org-protocol
~/repos/el/org-mode/lisp/org-mouse hides /usr/share/emacs/24.0.50/lisp/org/org-mouse
~/repos/el/org-mode/lisp/org-mobile hides /usr/share/emacs/24.0.50/lisp/org/org-mobile
~/repos/el/org-mode/lisp/org-mks hides /usr/share/emacs/24.0.50/lisp/org/org-mks
~/repos/el/org-mode/lisp/org-mhe hides /usr/share/emacs/24.0.50/lisp/org/org-mhe
~/repos/el/org-mode/lisp/org-mew hides /usr/share/emacs/24.0.50/lisp/org/org-mew
~/repos/el/org-mode/lisp/org-mac-message hides /usr/share/emacs/24.0.50/lisp/org/org-mac-message
~/repos/el/org-mode/lisp/org-macs hides /usr/share/emacs/24.0.50/lisp/org/org-macs
~/repos/el/org-mode/lisp/org-latex hides /usr/share/emacs/24.0.50/lisp/org/org-latex
~/repos/el/org-mode/lisp/org-list hides /usr/share/emacs/24.0.50/lisp/org/org-list
~/repos/el/org-mode/lisp/org-jsinfo hides /usr/share/emacs/24.0.50/lisp/org/org-jsinfo
~/repos/el/org-mode/lisp/org-irc hides /usr/share/emacs/24.0.50/lisp/org/org-irc
~/repos/el/org-mode/lisp/org-inlinetask hides /usr/share/emacs/24.0.50/lisp/org/org-inlinetask
~/repos/el/org-mode/lisp/org-info hides /usr/share/emacs/24.0.50/lisp/org/org-info
~/repos/el/org-mode/lisp/org-install hides /usr/share/emacs/24.0.50/lisp/org/org-install
~/repos/el/org-mode/lisp/org-indent hides /usr/share/emacs/24.0.50/lisp/org/org-indent
~/repos/el/org-mode/lisp/org-id hides /usr/share/emacs/24.0.50/lisp/org/org-id
~/repos/el/org-mode/lisp/org-icalendar hides /usr/share/emacs/24.0.50/lisp/org/org-icalendar
~/repos/el/org-mode/lisp/org-html hides /usr/share/emacs/24.0.50/lisp/org/org-html
~/repos/el/org-mode/lisp/org-gnus hides /usr/share/emacs/24.0.50/lisp/org/org-gnus
~/repos/el/org-mode/lisp/org-habit hides /usr/share/emacs/24.0.50/lisp/org/org-habit
~/repos/el/org-mode/lisp/org hides /usr/share/emacs/24.0.50/lisp/org/org
~/repos/el/org-mode/lisp/org-freemind hides /usr/share/emacs/24.0.50/lisp/org/org-freemind
~/repos/el/org-mode/lisp/org-feed hides /usr/share/emacs/24.0.50/lisp/org/org-feed
~/repos/el/org-mode/lisp/org-footnote hides /usr/share/emacs/24.0.50/lisp/org/org-footnote
~/repos/el/org-mode/lisp/org-faces hides /usr/share/emacs/24.0.50/lisp/org/org-faces
~/repos/el/org-mode/lisp/org-exp hides /usr/share/emacs/24.0.50/lisp/org/org-exp
~/repos/el/org-mode/lisp/org-exp-blocks hides /usr/share/emacs/24.0.50/lisp/org/org-exp-blocks
~/repos/el/org-mode/lisp/org-docbook hides /usr/share/emacs/24.0.50/lisp/org/org-docbook
~/repos/el/org-mode/lisp/org-entities hides /usr/share/emacs/24.0.50/lisp/org/org-entities
~/repos/el/org-mode/lisp/org-docview hides /usr/share/emacs/24.0.50/lisp/org/org-docview
~/repos/el/org-mode/lisp/org-datetree hides /usr/share/emacs/24.0.50/lisp/org/org-datetree
~/repos/el/org-mode/lisp/org-ctags hides /usr/share/emacs/24.0.50/lisp/org/org-ctags
~/repos/el/org-mode/lisp/org-crypt hides /usr/share/emacs/24.0.50/lisp/org/org-crypt
~/repos/el/org-mode/lisp/org-colview hides /usr/share/emacs/24.0.50/lisp/org/org-colview
~/repos/el/org-mode/lisp/org-complete hides /usr/share/emacs/24.0.50/lisp/org/org-complete
~/repos/el/org-mode/lisp/org-compat hides /usr/share/emacs/24.0.50/lisp/org/org-compat
~/repos/el/org-mode/lisp/org-clock hides /usr/share/emacs/24.0.50/lisp/org/org-clock
~/repos/el/org-mode/lisp/org-capture hides /usr/share/emacs/24.0.50/lisp/org/org-capture
~/repos/el/org-mode/lisp/org-bibtex hides /usr/share/emacs/24.0.50/lisp/org/org-bibtex
~/repos/el/org-mode/lisp/org-bbdb hides /usr/share/emacs/24.0.50/lisp/org/org-bbdb
~/repos/el/org-mode/lisp/org-beamer hides /usr/share/emacs/24.0.50/lisp/org/org-beamer
~/repos/el/org-mode/lisp/org-attach hides /usr/share/emacs/24.0.50/lisp/org/org-attach
~/repos/el/org-mode/lisp/org-agenda hides /usr/share/emacs/24.0.50/lisp/org/org-agenda
~/repos/el/org-mode/lisp/org-ascii hides /usr/share/emacs/24.0.50/lisp/org/org-ascii
~/repos/el/org-mode/lisp/org-archive hides /usr/share/emacs/24.0.50/lisp/org/org-archive
~/repos/el/org-mode/lisp/ob-tangle hides /usr/share/emacs/24.0.50/lisp/org/ob-tangle
~/repos/el/org-mode/lisp/ob-table hides /usr/share/emacs/24.0.50/lisp/org/ob-table
~/repos/el/org-mode/lisp/ob-sqlite hides /usr/share/emacs/24.0.50/lisp/org/ob-sqlite
~/repos/el/org-mode/lisp/ob-sql hides /usr/share/emacs/24.0.50/lisp/org/ob-sql
~/repos/el/org-mode/lisp/ob-sh hides /usr/share/emacs/24.0.50/lisp/org/ob-sh
~/repos/el/org-mode/lisp/ob-screen hides /usr/share/emacs/24.0.50/lisp/org/ob-screen
~/repos/el/org-mode/lisp/ob-scheme hides /usr/share/emacs/24.0.50/lisp/org/ob-scheme
~/repos/el/org-mode/lisp/ob-sass hides /usr/share/emacs/24.0.50/lisp/org/ob-sass
~/repos/el/org-mode/lisp/ob-ruby hides /usr/share/emacs/24.0.50/lisp/org/ob-ruby
~/repos/el/org-mode/lisp/ob-R hides /usr/share/emacs/24.0.50/lisp/org/ob-R
~/repos/el/org-mode/lisp/ob-ref hides /usr/share/emacs/24.0.50/lisp/org/ob-ref
~/repos/el/org-mode/lisp/ob-python hides /usr/share/emacs/24.0.50/lisp/org/ob-python
~/repos/el/org-mode/lisp/ob-perl hides /usr/share/emacs/24.0.50/lisp/org/ob-perl
~/repos/el/org-mode/lisp/ob-plantuml hides /usr/share/emacs/24.0.50/lisp/org/ob-plantuml
~/repos/el/org-mode/lisp/ob-octave hides /usr/share/emacs/24.0.50/lisp/org/ob-octave
~/repos/el/org-mode/lisp/ob-org hides /usr/share/emacs/24.0.50/lisp/org/ob-org
~/repos/el/org-mode/lisp/ob-ocaml hides /usr/share/emacs/24.0.50/lisp/org/ob-ocaml
~/repos/el/org-mode/lisp/ob-matlab hides /usr/share/emacs/24.0.50/lisp/org/ob-matlab
~/repos/el/org-mode/lisp/ob-mscgen hides /usr/share/emacs/24.0.50/lisp/org/ob-mscgen
~/repos/el/org-mode/lisp/ob-exp hides /usr/share/emacs/24.0.50/lisp/org/ob-exp
~/repos/el/org-mode/lisp/ob-lisp hides /usr/share/emacs/24.0.50/lisp/org/ob-lisp
~/repos/el/org-mode/lisp/ob-lob hides /usr/share/emacs/24.0.50/lisp/org/ob-lob
~/repos/el/org-mode/lisp/ob-ledger hides /usr/share/emacs/24.0.50/lisp/org/ob-ledger
~/repos/el/org-mode/lisp/ob-latex hides /usr/share/emacs/24.0.50/lisp/org/ob-latex
~/repos/el/org-mode/lisp/ob-js hides /usr/share/emacs/24.0.50/lisp/org/ob-js
~/repos/el/org-mode/lisp/ob-keys hides /usr/share/emacs/24.0.50/lisp/org/ob-keys
~/repos/el/org-mode/lisp/ob-haskell hides /usr/share/emacs/24.0.50/lisp/org/ob-haskell
~/repos/el/org-mode/lisp/ob-gnuplot hides /usr/share/emacs/24.0.50/lisp/org/ob-gnuplot
~/repos/el/org-mode/lisp/ob hides /usr/share/emacs/24.0.50/lisp/org/ob
~/repos/el/org-mode/lisp/ob-emacs-lisp hides /usr/share/emacs/24.0.50/lisp/org/ob-emacs-lisp
~/repos/el/org-mode/lisp/ob-eval hides /usr/share/emacs/24.0.50/lisp/org/ob-eval
~/repos/el/org-mode/lisp/ob-dot hides /usr/share/emacs/24.0.50/lisp/org/ob-dot
~/repos/el/org-mode/lisp/ob-C hides /usr/share/emacs/24.0.50/lisp/org/ob-C
~/repos/el/org-mode/lisp/ob-ditaa hides /usr/share/emacs/24.0.50/lisp/org/ob-ditaa
~/repos/el/org-mode/lisp/ob-css hides /usr/share/emacs/24.0.50/lisp/org/ob-css
~/repos/el/org-mode/lisp/ob-comint hides /usr/share/emacs/24.0.50/lisp/org/ob-comint
~/repos/el/org-mode/lisp/ob-clojure hides /usr/share/emacs/24.0.50/lisp/org/ob-clojure
~/repos/el/org-mode/lisp/ob-calc hides /usr/share/emacs/24.0.50/lisp/org/ob-calc
~/repos/el/org-mode/lisp/ob-asymptote hides /usr/share/emacs/24.0.50/lisp/org/ob-asymptote
~/repos/el/gnus/lisp/tls hides /usr/share/emacs/24.0.50/lisp/net/tls
~/repos/el/gnus/lisp/sasl-ntlm hides /usr/share/emacs/24.0.50/lisp/net/sasl-ntlm
~/repos/el/gnus/lisp/sasl hides /usr/share/emacs/24.0.50/lisp/net/sasl
~/repos/el/gnus/lisp/sasl-digest hides /usr/share/emacs/24.0.50/lisp/net/sasl-digest
~/repos/el/gnus/lisp/sasl-cram hides /usr/share/emacs/24.0.50/lisp/net/sasl-cram
~/repos/el/gnus/lisp/ntlm hides /usr/share/emacs/24.0.50/lisp/net/ntlm
~/repos/el/gnus/lisp/netrc hides /usr/share/emacs/24.0.50/lisp/net/netrc
~/repos/el/gnus/lisp/imap hides /usr/share/emacs/24.0.50/lisp/net/imap
~/repos/el/gnus/lisp/hmac-md5 hides /usr/share/emacs/24.0.50/lisp/net/hmac-md5
~/repos/el/gnus/lisp/hmac-def hides /usr/share/emacs/24.0.50/lisp/net/hmac-def
~/repos/el/gnus/lisp/dns hides /usr/share/emacs/24.0.50/lisp/net/dns
~/repos/el/gnus/lisp/dig hides /usr/share/emacs/24.0.50/lisp/net/dig
~/repos/el/gnus/lisp/uudecode hides /usr/share/emacs/24.0.50/lisp/mail/uudecode
~/repos/el/gnus/lisp/hashcash hides /usr/share/emacs/24.0.50/lisp/mail/hashcash
~/repos/el/gnus/lisp/binhex hides /usr/share/emacs/24.0.50/lisp/mail/binhex
~/repos/el/gnus/lisp/spam-wash hides /usr/share/emacs/24.0.50/lisp/gnus/spam-wash
~/repos/el/gnus/lisp/yenc hides /usr/share/emacs/24.0.50/lisp/gnus/yenc
~/repos/el/gnus/lisp/utf7 hides /usr/share/emacs/24.0.50/lisp/gnus/utf7
~/repos/el/gnus/lisp/starttls hides /usr/share/emacs/24.0.50/lisp/gnus/starttls
~/repos/el/gnus/lisp/spam hides /usr/share/emacs/24.0.50/lisp/gnus/spam
~/repos/el/gnus/lisp/spam-stat hides /usr/share/emacs/24.0.50/lisp/gnus/spam-stat
~/repos/el/gnus/lisp/spam-report hides /usr/share/emacs/24.0.50/lisp/gnus/spam-report
~/repos/el/gnus/lisp/smiley hides /usr/share/emacs/24.0.50/lisp/gnus/smiley
~/repos/el/gnus/lisp/smime hides /usr/share/emacs/24.0.50/lisp/gnus/smime
~/repos/el/gnus/lisp/sieve-mode hides /usr/share/emacs/24.0.50/lisp/gnus/sieve-mode
~/repos/el/gnus/lisp/sieve-manage hides /usr/share/emacs/24.0.50/lisp/gnus/sieve-manage
~/repos/el/gnus/lisp/shr hides /usr/share/emacs/24.0.50/lisp/gnus/shr
~/repos/el/gnus/lisp/sieve hides /usr/share/emacs/24.0.50/lisp/gnus/sieve
~/repos/el/gnus/lisp/shr-color hides /usr/share/emacs/24.0.50/lisp/gnus/shr-color
~/repos/el/gnus/lisp/score-mode hides /usr/share/emacs/24.0.50/lisp/gnus/score-mode
~/repos/el/gnus/lisp/rtree hides /usr/share/emacs/24.0.50/lisp/gnus/rtree
~/repos/el/gnus/lisp/rfc2231 hides /usr/share/emacs/24.0.50/lisp/gnus/rfc2231
~/repos/el/gnus/lisp/rfc2104 hides /usr/share/emacs/24.0.50/lisp/gnus/rfc2104
~/repos/el/gnus/lisp/rfc2047 hides /usr/share/emacs/24.0.50/lisp/gnus/rfc2047
~/repos/el/gnus/lisp/rfc2045 hides /usr/share/emacs/24.0.50/lisp/gnus/rfc2045
~/repos/el/gnus/lisp/rfc1843 hides /usr/share/emacs/24.0.50/lisp/gnus/rfc1843
~/repos/el/gnus/lisp/qp hides /usr/share/emacs/24.0.50/lisp/gnus/qp
~/repos/el/gnus/lisp/proto-stream hides /usr/share/emacs/24.0.50/lisp/gnus/proto-stream
~/repos/el/gnus/lisp/pop3 hides /usr/share/emacs/24.0.50/lisp/gnus/pop3
~/repos/el/gnus/lisp/nnvirtual hides /usr/share/emacs/24.0.50/lisp/gnus/nnvirtual
~/repos/el/gnus/lisp/nnweb hides /usr/share/emacs/24.0.50/lisp/gnus/nnweb
~/repos/el/gnus/lisp/nntp hides /usr/share/emacs/24.0.50/lisp/gnus/nntp
~/repos/el/gnus/lisp/nnrss hides /usr/share/emacs/24.0.50/lisp/gnus/nnrss
~/repos/el/gnus/lisp/nnregistry hides /usr/share/emacs/24.0.50/lisp/gnus/nnregistry
~/repos/el/gnus/lisp/nnspool hides /usr/share/emacs/24.0.50/lisp/gnus/nnspool
~/repos/el/gnus/lisp/nnoo hides /usr/share/emacs/24.0.50/lisp/gnus/nnoo
~/repos/el/gnus/lisp/nnml hides /usr/share/emacs/24.0.50/lisp/gnus/nnml
~/repos/el/gnus/lisp/nnnil hides /usr/share/emacs/24.0.50/lisp/gnus/nnnil
~/repos/el/gnus/lisp/nnmairix hides /usr/share/emacs/24.0.50/lisp/gnus/nnmairix
~/repos/el/gnus/lisp/nnmh hides /usr/share/emacs/24.0.50/lisp/gnus/nnmh
~/repos/el/gnus/lisp/nnmbox hides /usr/share/emacs/24.0.50/lisp/gnus/nnmbox
~/repos/el/gnus/lisp/nnmail hides /usr/share/emacs/24.0.50/lisp/gnus/nnmail
~/repos/el/gnus/lisp/nnmaildir hides /usr/share/emacs/24.0.50/lisp/gnus/nnmaildir
~/repos/el/gnus/lisp/nnir hides /usr/share/emacs/24.0.50/lisp/gnus/nnir
~/repos/el/gnus/lisp/nnimap hides /usr/share/emacs/24.0.50/lisp/gnus/nnimap
~/repos/el/gnus/lisp/nnheader hides /usr/share/emacs/24.0.50/lisp/gnus/nnheader
~/repos/el/gnus/lisp/nnfolder hides /usr/share/emacs/24.0.50/lisp/gnus/nnfolder
~/repos/el/gnus/lisp/nneething hides /usr/share/emacs/24.0.50/lisp/gnus/nneething
~/repos/el/gnus/lisp/nngateway hides /usr/share/emacs/24.0.50/lisp/gnus/nngateway
~/repos/el/gnus/lisp/nndoc hides /usr/share/emacs/24.0.50/lisp/gnus/nndoc
~/repos/el/gnus/lisp/nndraft hides /usr/share/emacs/24.0.50/lisp/gnus/nndraft
~/repos/el/gnus/lisp/nndir hides /usr/share/emacs/24.0.50/lisp/gnus/nndir
~/repos/el/gnus/lisp/nndiary hides /usr/share/emacs/24.0.50/lisp/gnus/nndiary
~/repos/el/gnus/lisp/nnagent hides /usr/share/emacs/24.0.50/lisp/gnus/nnagent
~/repos/el/gnus/lisp/nnbabyl hides /usr/share/emacs/24.0.50/lisp/gnus/nnbabyl
~/repos/el/gnus/lisp/mm-view hides /usr/share/emacs/24.0.50/lisp/gnus/mm-view
~/repos/el/gnus/lisp/mm-uu hides /usr/share/emacs/24.0.50/lisp/gnus/mm-uu
~/repos/el/gnus/lisp/mm-partial hides /usr/share/emacs/24.0.50/lisp/gnus/mm-partial
~/repos/el/gnus/lisp/mm-util hides /usr/share/emacs/24.0.50/lisp/gnus/mm-util
~/repos/el/gnus/lisp/mm-url hides /usr/share/emacs/24.0.50/lisp/gnus/mm-url
~/repos/el/gnus/lisp/mml-smime hides /usr/share/emacs/24.0.50/lisp/gnus/mml-smime
~/repos/el/gnus/lisp/mml hides /usr/share/emacs/24.0.50/lisp/gnus/mml
~/repos/el/gnus/lisp/mml-sec hides /usr/share/emacs/24.0.50/lisp/gnus/mml-sec
~/repos/el/gnus/lisp/mml2015 hides /usr/share/emacs/24.0.50/lisp/gnus/mml2015
~/repos/el/gnus/lisp/mm-extern hides /usr/share/emacs/24.0.50/lisp/gnus/mm-extern
~/repos/el/gnus/lisp/mml1991 hides /usr/share/emacs/24.0.50/lisp/gnus/mml1991
~/repos/el/gnus/lisp/mm-encode hides /usr/share/emacs/24.0.50/lisp/gnus/mm-encode
~/repos/el/gnus/lisp/mm-decode hides /usr/share/emacs/24.0.50/lisp/gnus/mm-decode
~/repos/el/gnus/lisp/mm-bodies hides /usr/share/emacs/24.0.50/lisp/gnus/mm-bodies
~/repos/el/gnus/lisp/message hides /usr/share/emacs/24.0.50/lisp/gnus/message
~/repos/el/gnus/lisp/legacy-gnus-agent hides /usr/share/emacs/24.0.50/lisp/gnus/legacy-gnus-agent
~/repos/el/gnus/lisp/messcompat hides /usr/share/emacs/24.0.50/lisp/gnus/messcompat
~/repos/el/gnus/lisp/mail-source hides /usr/share/emacs/24.0.50/lisp/gnus/mail-source
~/repos/el/gnus/lisp/mail-prsvr hides /usr/share/emacs/24.0.50/lisp/gnus/mail-prsvr
~/repos/el/gnus/lisp/mail-parse hides /usr/share/emacs/24.0.50/lisp/gnus/mail-parse
~/repos/el/gnus/lisp/mailcap hides /usr/share/emacs/24.0.50/lisp/gnus/mailcap
~/repos/el/gnus/lisp/gravatar hides /usr/share/emacs/24.0.50/lisp/gnus/gravatar
~/repos/el/gnus/lisp/ietf-drums hides /usr/share/emacs/24.0.50/lisp/gnus/ietf-drums
~/repos/el/gnus/lisp/html2text hides /usr/share/emacs/24.0.50/lisp/gnus/html2text
~/repos/el/gnus/lisp/gnus-vm hides /usr/share/emacs/24.0.50/lisp/gnus/gnus-vm
~/repos/el/gnus/lisp/gnus-win hides /usr/share/emacs/24.0.50/lisp/gnus/gnus-win
~/repos/el/gnus/lisp/gnus-uu hides /usr/share/emacs/24.0.50/lisp/gnus/gnus-uu
~/repos/el/gnus/lisp/gnus-sum hides /usr/share/emacs/24.0.50/lisp/gnus/gnus-sum
~/repos/el/gnus/lisp/gnus-util hides /usr/share/emacs/24.0.50/lisp/gnus/gnus-util
~/repos/el/gnus/lisp/gnus-topic hides /usr/share/emacs/24.0.50/lisp/gnus/gnus-topic
~/repos/el/gnus/lisp/gnus-undo hides /usr/share/emacs/24.0.50/lisp/gnus/gnus-undo
~/repos/el/gnus/lisp/gnus-sync hides /usr/share/emacs/24.0.50/lisp/gnus/gnus-sync
~/repos/el/gnus/lisp/gnus-start hides /usr/share/emacs/24.0.50/lisp/gnus/gnus-start
~/repos/el/gnus/lisp/gnus-srvr hides /usr/share/emacs/24.0.50/lisp/gnus/gnus-srvr
~/repos/el/gnus/lisp/gnus-sieve hides /usr/share/emacs/24.0.50/lisp/gnus/gnus-sieve
~/repos/el/gnus/lisp/gnus-score hides /usr/share/emacs/24.0.50/lisp/gnus/gnus-score
~/repos/el/gnus/lisp/gnus-spec hides /usr/share/emacs/24.0.50/lisp/gnus/gnus-spec
~/repos/el/gnus/lisp/gnus-salt hides /usr/share/emacs/24.0.50/lisp/gnus/gnus-salt
~/repos/el/gnus/lisp/gnus-setup hides /usr/share/emacs/24.0.50/lisp/gnus/gnus-setup
~/repos/el/gnus/lisp/gnus-registry hides /usr/share/emacs/24.0.50/lisp/gnus/gnus-registry
~/repos/el/gnus/lisp/gnus-picon hides /usr/share/emacs/24.0.50/lisp/gnus/gnus-picon
~/repos/el/gnus/lisp/gnus-msg hides /usr/share/emacs/24.0.50/lisp/gnus/gnus-msg
~/repos/el/gnus/lisp/gnus-range hides /usr/share/emacs/24.0.50/lisp/gnus/gnus-range
~/repos/el/gnus/lisp/gnus-mlspl hides /usr/share/emacs/24.0.50/lisp/gnus/gnus-mlspl
~/repos/el/gnus/lisp/gnus-ml hides /usr/share/emacs/24.0.50/lisp/gnus/gnus-ml
~/repos/el/gnus/lisp/gnus-mh hides /usr/share/emacs/24.0.50/lisp/gnus/gnus-mh
~/repos/el/gnus/lisp/gnus-int hides /usr/share/emacs/24.0.50/lisp/gnus/gnus-int
~/repos/el/gnus/lisp/gnus-logic hides /usr/share/emacs/24.0.50/lisp/gnus/gnus-logic
~/repos/el/gnus/lisp/gnus-kill hides /usr/share/emacs/24.0.50/lisp/gnus/gnus-kill
~/repos/el/gnus/lisp/gnus-group hides /usr/share/emacs/24.0.50/lisp/gnus/gnus-group
~/repos/el/gnus/lisp/gnus-html hides /usr/share/emacs/24.0.50/lisp/gnus/gnus-html
~/repos/el/gnus/lisp/gnus-gravatar hides /usr/share/emacs/24.0.50/lisp/gnus/gnus-gravatar
~/repos/el/gnus/lisp/gnus-fun hides /usr/share/emacs/24.0.50/lisp/gnus/gnus-fun
~/repos/el/gnus/lisp/gnus-ems hides /usr/share/emacs/24.0.50/lisp/gnus/gnus-ems
~/repos/el/gnus/lisp/gnus-draft hides /usr/share/emacs/24.0.50/lisp/gnus/gnus-draft
~/repos/el/gnus/lisp/gnus-dup hides /usr/share/emacs/24.0.50/lisp/gnus/gnus-dup
~/repos/el/gnus/lisp/gnus hides /usr/share/emacs/24.0.50/lisp/gnus/gnus
~/repos/el/gnus/lisp/gnus-eform hides /usr/share/emacs/24.0.50/lisp/gnus/gnus-eform
~/repos/el/gnus/lisp/gnus-diary hides /usr/share/emacs/24.0.50/lisp/gnus/gnus-diary
~/repos/el/gnus/lisp/gnus-dired hides /usr/share/emacs/24.0.50/lisp/gnus/gnus-dired
~/repos/el/gnus/lisp/gnus-demon hides /usr/share/emacs/24.0.50/lisp/gnus/gnus-demon
~/repos/el/gnus/lisp/gnus-delay hides /usr/share/emacs/24.0.50/lisp/gnus/gnus-delay
~/repos/el/gnus/lisp/gnus-cus hides /usr/share/emacs/24.0.50/lisp/gnus/gnus-cus
~/repos/el/gnus/lisp/gnus-cite hides /usr/share/emacs/24.0.50/lisp/gnus/gnus-cite
~/repos/el/gnus/lisp/gnus-cache hides /usr/share/emacs/24.0.50/lisp/gnus/gnus-cache
~/repos/el/gnus/lisp/gnus-bookmark hides /usr/share/emacs/24.0.50/lisp/gnus/gnus-bookmark
~/repos/el/gnus/lisp/gnus-async hides /usr/share/emacs/24.0.50/lisp/gnus/gnus-async
~/repos/el/gnus/lisp/gnus-bcklg hides /usr/share/emacs/24.0.50/lisp/gnus/gnus-bcklg
~/repos/el/gnus/lisp/gnus-agent hides /usr/share/emacs/24.0.50/lisp/gnus/gnus-agent
~/repos/el/gnus/lisp/gnus-art hides /usr/share/emacs/24.0.50/lisp/gnus/gnus-art
~/repos/el/gnus/lisp/deuglify hides /usr/share/emacs/24.0.50/lisp/gnus/deuglify
~/repos/el/gnus/lisp/gmm-utils hides /usr/share/emacs/24.0.50/lisp/gnus/gmm-utils
~/repos/el/gnus/lisp/flow-fill hides /usr/share/emacs/24.0.50/lisp/gnus/flow-fill
~/repos/el/gnus/lisp/ecomplete hides /usr/share/emacs/24.0.50/lisp/gnus/ecomplete
~/repos/el/gnus/lisp/compface hides /usr/share/emacs/24.0.50/lisp/gnus/compface
~/repos/el/gnus/lisp/canlock hides /usr/share/emacs/24.0.50/lisp/gnus/canlock
~/repos/el/gnus/lisp/auth-source hides /usr/share/emacs/24.0.50/lisp/gnus/auth-source
~/repos/el/gnus/lisp/.dir-locals hides /usr/share/emacs/24.0.50/lisp/gnus/.dir-locals
~/repos/el/gnus/lisp/time-date hides /usr/share/emacs/24.0.50/lisp/calendar/time-date
~/repos/el/gnus/lisp/parse-time hides /usr/share/emacs/24.0.50/lisp/calendar/parse-time
~/repos/el/gnus/lisp/pgg-pgp hides /usr/share/emacs/24.0.50/lisp/obsolete/pgg-pgp
~/repos/el/gnus/lisp/pgg-pgp5 hides /usr/share/emacs/24.0.50/lisp/obsolete/pgg-pgp5
~/repos/el/gnus/lisp/pgg-parse hides /usr/share/emacs/24.0.50/lisp/obsolete/pgg-parse
~/repos/el/gnus/lisp/pgg-gpg hides /usr/share/emacs/24.0.50/lisp/obsolete/pgg-gpg
~/repos/el/gnus/lisp/pgg hides /usr/share/emacs/24.0.50/lisp/obsolete/pgg
~/repos/el/gnus/lisp/pgg-def hides /usr/share/emacs/24.0.50/lisp/obsolete/pgg-def

Features:
(shadow emacsbug canlock sha1 hex-util bbdb-gui hippie-exp skeleton
mailalias smtpmail newcomment qp mule-util xgit-dvc xgit xgit-annotate
dvc-annotate xgit-log tla smerge-mode dvc-state dvc-config dvc-diff
dvc-fileinfo diff tla-gnus dvc-gnus dvc-cmenu dvc-about dvc-version
dvc-revlist bzr-core tla-core tla-autoconf tla-defs dvc-log vc
vc-dispatcher dvc-unified dvc-tips ediff-merg ediff-diff ediff-wind
ediff-help ediff-util ediff-mult ediff-init ediff xdarcs-core xgit-core
xhg-core xmtn-minimal sort smiley ansi-color gnus-cite gnus-async
gnus-bcklg gnus-ml nndraft nnmh utf-7 rot13 nnimap parse-time utf7 nnml
bbdb-gnus bbdb-snarf nnnil gnus-agent gnus-srvr gnus-score score-mode
nnvirtual gnus-cache gnus-demon nntp proto-stream starttls spam
spam-stat bbdb-com gnus-uu yenc gnus-msg gnus-gravatar mail-extr
gnus-art mm-uu mml2015 mm-view smime password-cache dig gravatar
gnus-topic gnus-registry nnir gnus-sum macroexp nnoo gnus-group
gnus-undo nnmail mail-source th-private gnus-start gnus-spec gnus-int
gnus-range gnus-win eldoc go-mode-load flymake greqlscript-mode
greql-mode tg-mode generic th-latex paredit dvc-autoloads dvc-core
dvc-lisp dvc-buffers dvc-ui dvc-register dvc-utils dvc-emacs ewoc
dvc-defs dvc-site magit diff-mode log-edit pcvs-util add-log
magit-key-mode epa-file epa epg epg-config wtf cus-edit cus-start
cus-load rdictcc org-location-google-maps google-maps google-maps-static
google-maps-geocode google-maps-base json org-google-weather format-spec
google-weather xml url-cache org-beamer solar cal-dst holidays
hol-loaddefs appt diary-lib diary-loaddefs vc-git hl-line org-w3m
org-irc org-jsinfo org-infojs org-html org-exp ob-exp org-exp-blocks
org-info org-gnus org-docview org-bibtex org-bbdb org-protocol
org-attach org-id org-agenda org ob-emacs-lisp ob-tangle ob-ref ob-lob
ob-table org-footnote org-src ob-comint ob-keys ob ob-eval org-complete
pcomplete org-list org-faces org-compat org-entities org-macs time-date
org-install cal-menu calendar cal-loaddefs dired-x dired-aux
highlight-symbol hi-lock th-boxquote boxquote rect ecomplete message
idna sendmail rfc822 mml mml-sec mm-decode mm-bodies mm-encode
mailabbrev gmm-utils mailheader info server auto-complete-config
auto-complete popup yasnippet dropdown-list help-mode view disp-table
noutline outline browse-kill-ring derived recentf tree-widget
sr-speedbar speedbar sb-image ezimage dframe assoc anything-config
warnings compile comint ring browse-url semantic/util-modes
semantic/util semantic semantic/tag semantic/lex semantic/fw eieio
byte-opt bytecomp byte-compile mode-local cedet imenu bookmark pp
easymenu rx ffap thingatpt anything window-number easy-mmode uniquify
subword saveplace savehist paren lusty-explorer dired cl edmacro kmacro
advice help-fns advice-preload th-common mm-url gnus gnus-ems nnheader
mail-utils wid-edit url-http tls url url-proxy url-privacy url-expand
url-methods url-history mailcap url-auth mail-parse rfc2231 rfc2047
rfc2045 ietf-drums url-cookie url-util url-parse auth-source netrc
gnus-util url-gw url-vars mm-util mail-prsvr windmove gnus-load
site-gentoo preview-latex bbdb-autoloads bbdb regexp-opt timezone
tex-site auto-loads tooltip ediff-hook vc-hooks lisp-float-type mwheel
x-win x-dnd tool-bar dnd fontset image fringe lisp-mode register page
menu-bar rfn-eshadow timer select scroll-bar mouse jit-lock font-lock
syntax facemenu font-core frame cham georgian utf-8-lang misc-lang
vietnamese tibetan thai tai-viet lao korean japanese hebrew greek
romanian slovak czech european ethiopic indian cyrillic chinese
case-table epa-hook jka-cmpr-hook help simple abbrev loaddefs button
minibuffer faces cus-face files text-properties overlay md5 base64
format env code-pages mule custom widget hashtable-print-readable
backquote make-network-process dbusbind dynamic-setting
font-render-setting x multi-tty emacs)




Severity set to 'serious' from 'normal' Request was from Chong Yidong <cyd <at> stupidchicken.com> to control <at> debbugs.gnu.org. (Sat, 22 Jan 2011 20:27:01 GMT) Full text and rfc822 format available.

Information forwarded to owner <at> debbugs.gnu.org, bug-gnu-emacs <at> gnu.org, bug-cc-mode <at> gnu.org:
bug#7722; Package emacs,cc-mode. (Sat, 22 Jan 2011 20:30:03 GMT) Full text and rfc822 format available.

Message #10 received at 7722 <at> debbugs.gnu.org (full text, mbox):

From: Chong Yidong <cyd <at> stupidchicken.com>
To: Alan Mackenzie  <acm <at> muc.de>
Cc: 7722 <at> debbugs.gnu.org, Tassilo Horn <tassilo <at> member.fsf.org>
Subject: Re: bug#7722: 24.0.50;
	Finding this C++ header file drops emacs into a infinite loop
Date: Sat, 22 Jan 2011 15:37:24 -0500
[Message part 1 (text/plain, inline)]
Tassilo Horn <tassilo <at> member.fsf.org> writes:

> Orininally reported by Caligo <iteronvexor <at> gmail.com>
>
> He uses GNU Emacs 23.2.1 (x86_64-pc-linux-gnu, GTK+ Version 2.20.1),
> but the bug in still in the current bzr trunk.
>
> 1. emacs -Q bug.hpp
> 2. emacs loops infinitely using 100% CPU resources
>
> The offending file is that (according to the original reporter, the
> spaces and empty lines are needed):

I can reproduce this (file attached for convenience).  Alan, could you
take a look?  Looks like a loop in c-forward-<>-arglist-recur:

Lisp Backtrace:
"c-forward-<>-arglist-recur" (0xffff4528)
"c-forward-<>-arglist-recur" (0xffff4708)
"c-forward-<>-arglist-recur" (0xffff48e8)
"c-forward-<>-arglist-recur" (0xffff4ac8)
"c-forward-<>-arglist-recur" (0xffff4ca8)
"c-forward-<>-arglist-recur" (0xffff4e88)
"c-forward-<>-arglist-recur" (0xffff5068)
"c-forward-<>-arglist-recur" (0xffff5248)
"c-forward-<>-arglist-recur" (0xffff5428)
"c-forward-<>-arglist-recur" (0xffff5608)
"c-forward-<>-arglist-recur" (0xffff57e8)
"c-forward-<>-arglist-recur" (0xffff59c8)
"c-forward-<>-arglist-recur" (0xffff5ba8)
"c-forward-<>-arglist-recur" (0xffff5d88)
"byte-code" (0xffff5e60)
"c-forward-<>-arglist" (0xffff6208)
---Type <return> to continue, or q <return> to quit---
"c-forward-name" (0xffff63e8)
"c-forward-type" (0xffff65c8)
"c-forward-decl-or-cast-1" (0xffff67f8)
0xee3c20 PVEC_COMPILED
"c-find-decl-spots" (0xffff6bb8)
"c-font-lock-declarations" (0xffff6dd8)
"font-lock-fontify-keywords-region" (0xffff6fc8)
"font-lock-default-fontify-region" (0xffff7198)
"font-lock-fontify-region" (0xffff7440)
"run-hook-with-args" (0xffff7438)
"byte-code" (0xffff7520)
"jit-lock-fontify-now" (0xffff7938)
"jit-lock-function" (0xffff7cc8)



[bug.hpp (text/x-c++hdr, inline)]













































class ConversionConsole : public QWidget{


private:
  typedef boost::array<InputLine, 22> InputLines;



























  typedef cons<XYZ, cons<xyY, cons<Lab, cons<LCHab, cons<Luv, cons<LCHuv,
          cons<AdobeRGB, cons<AppleRGB, cons<BestRGB, cons<BetaRGB,
  	  cons<BruceRGB, cons<CIERGB, cons<ColorMatchRGB, cons<DonRGB4,
  	  cons<ECIRGB, cons<EktaSpacePS5, cons<NTSCRGB, cons<PAL_SECAMRGB,
  	  cons<ProPhotoRGB, cons<SMPTE_CRGB, cons<sRGB, cons<WideGamutRGB
  	  > > > > > > > > > > > > > > > > > > > > > > ColorSpaces;

};

Information forwarded to owner <at> debbugs.gnu.org, bug-gnu-emacs <at> gnu.org, bug-cc-mode <at> gnu.org:
bug#7722; Package emacs,cc-mode. (Thu, 27 Jan 2011 00:48:02 GMT) Full text and rfc822 format available.

Message #13 received at 7722 <at> debbugs.gnu.org (full text, mbox):

From: Chong Yidong <cyd <at> stupidchicken.com>
To: Alan Mackenzie <acm <at> muc.de>
Cc: 7722 <at> debbugs.gnu.org, Tassilo Horn <tassilo <at> member.fsf.org>
Subject: Re: bug#7722: 24.0.50;
	Finding this C++ header file drops emacs into a infinite loop
Date: Wed, 26 Jan 2011 19:55:15 -0500
Chong Yidong <cyd <at> stupidchicken.com> writes:

>> 1. emacs -Q bug.hpp
>> 2. emacs loops infinitely using 100% CPU resources
>>
>> The offending file is that (according to the original reporter, the
>> spaces and empty lines are needed):
>
> I can reproduce this (file attached for convenience).  Alan, could you
> take a look?  Looks like a loop in c-forward-<>-arglist-recur:

In the meantime, I have added the following hack/workaround to the
emacs-23 branch, which seems to break the loop.  Let me know if you find
a fix that's safer (since we are well into the 23.3 pretest).

*** lisp/progmodes/cc-engine.el	2011-01-02 23:50:46 +0000
--- lisp/progmodes/cc-engine.el	2011-01-27 00:49:22 +0000
***************
*** 4393,4398 ****
--- 4393,4400 ----
        (goto-char safe-pos)
        t)))
  
+ (defvar c-forward-<>-arglist-recur-depth)
+ 
  (defun c-forward-<>-arglist (all-types)
    ;; The point is assumed to be at a "<".  Try to treat it as the open
    ;; paren of an angle bracket arglist and move forward to the
***************
*** 4418,4424 ****
  	;; If `c-record-type-identifiers' is set then activate
  	;; recording of any found types that constitute an argument in
  	;; the arglist.
! 	(c-record-found-types (if c-record-type-identifiers t)))
      (if (catch 'angle-bracket-arglist-escape
  	  (setq c-record-found-types
  		(c-forward-<>-arglist-recur all-types)))
--- 4420,4427 ----
  	;; If `c-record-type-identifiers' is set then activate
  	;; recording of any found types that constitute an argument in
  	;; the arglist.
! 	(c-record-found-types (if c-record-type-identifiers t))
! 	(c-forward-<>-arglist-recur--depth 0))
      (if (catch 'angle-bracket-arglist-escape
  	  (setq c-record-found-types
  		(c-forward-<>-arglist-recur all-types)))
***************
*** 4434,4439 ****
--- 4437,4450 ----
        nil)))
  
  (defun c-forward-<>-arglist-recur (all-types)
+ 
+   ;; Temporary workaround for Bug#7722.
+   (when (boundp 'c-forward-<>-arglist-recur--depth)
+     (if (> c-forward-<>-arglist-recur--depth 100)
+ 	(error "Max recursion depth reached in <> arglist")
+       (setq c-forward-<>-arglist-recur--depth
+ 	    (1+ c-forward-<>-arglist-recur--depth))))
+ 
    ;; Recursive part of `c-forward-<>-arglist'.
    ;;
    ;; This function might do hidden buffer changes.





Information forwarded to owner <at> debbugs.gnu.org, bug-gnu-emacs <at> gnu.org, bug-cc-mode <at> gnu.org:
bug#7722; Package emacs,cc-mode. (Sun, 30 Jan 2011 21:16:01 GMT) Full text and rfc822 format available.

Message #16 received at submit <at> debbugs.gnu.org (full text, mbox):

From: Daniel Colascione <dan.colascione <at> gmail.com>
To: bug-gnu-emacs <at> gnu.org
Cc: 7722 <at> debbugs.gnu.org, Alan Mackenzie <acm <at> muc.de>,
	Tassilo Horn <tassilo <at> member.fsf.org>
Subject: Re: bug#7722: 24.0.50; Finding this C++ header file drops emacs into
	a infinite loop
Date: Sun, 30 Jan 2011 13:23:35 -0800
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

On 1/26/11 4:55 PM, Chong Yidong wrote:
> Chong Yidong <cyd <at> stupidchicken.com> writes:
> 
>>> 1. emacs -Q bug.hpp
>>> 2. emacs loops infinitely using 100% CPU resources
>>>
>>> The offending file is that (according to the original reporter, the
>>> spaces and empty lines are needed):
>>
>> I can reproduce this (file attached for convenience).  Alan, could you
>> take a look?  Looks like a loop in c-forward-<>-arglist-recur:
> 
> In the meantime, I have added the following hack/workaround to the
> emacs-23 branch, which seems to break the loop.  Let me know if you find
> a fix that's safer (since we are well into the 23.3 pretest).

Incidentally, I can't reproduce the problem with the trunk cc-mode.
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.11 (Darwin)

iEYEARECAAYFAk1F1soACgkQ17c2LVA10VvtFACgi2KuRCq9m15aDx44xGtVTYGB
Z3AAnjuVGnWv1P6gz4vItI5HOoSiVcMw
=Emh5
-----END PGP SIGNATURE-----





Information forwarded to owner <at> debbugs.gnu.org, bug-gnu-emacs <at> gnu.org, bug-cc-mode <at> gnu.org:
bug#7722; Package emacs,cc-mode. (Sun, 30 Jan 2011 21:16:02 GMT) Full text and rfc822 format available.

Information forwarded to owner <at> debbugs.gnu.org, bug-gnu-emacs <at> gnu.org, bug-cc-mode <at> gnu.org:
bug#7722; Package emacs,cc-mode. (Fri, 04 Feb 2011 21:58:01 GMT) Full text and rfc822 format available.

Message #22 received at 7722 <at> debbugs.gnu.org (full text, mbox):

From: Alan Mackenzie <acm <at> muc.de>
To: Chong Yidong <cyd <at> stupidchicken.com>
Cc: 7722 <at> debbugs.gnu.org, Tassilo Horn <tassilo <at> member.fsf.org>
Subject: Re: bug#7722: 24.0.50;
	Finding this C++ header file drops emacs into a infinite loop
Date: Fri, 4 Feb 2011 22:22:07 +0000
Hi there, Yidong, Tassilo,

On Sat, Jan 22, 2011 at 03:37:24PM -0500, Chong Yidong wrote:
> Tassilo Horn <tassilo <at> member.fsf.org> writes:

> > Originally reported by Caligo <iteronvexor <at> gmail.com>

> > He uses GNU Emacs 23.2.1 (x86_64-pc-linux-gnu, GTK+ Version 2.20.1),
> > but the bug in still in the current bzr trunk.

> > 1. emacs -Q bug.hpp
> > 2. emacs loops infinitely using 100% CPU resources

> > The offending file is that (according to the original reporter, the
> > spaces and empty lines are needed):

> I can reproduce this (file attached for convenience).  Alan, could you
> take a look?  Looks like a loop in c-forward-<>-arglist-recur:

It was indeed such a loop.  It was caused by a 500n jit-lock boundary
falling in the middle of a template construct, hence the "necessity" of
all the whitespace to reproduce the failure.

Here's a putative patch for the problem.  I've refactored the offending
function by replacing obscenely nested `if'-forms with a simple `cond'.
I've also removed some narrowing (to the 500n limit) which should help
jit-lock, hopefully without hurting too much elsewhere.

Tassilo, would you try out the patch, please, and let me know how it
goes.  Thanks!



=== modified file 'lisp/progmodes/cc-engine.el'
*** lisp/progmodes/cc-engine.el	2011-01-31 23:54:50 +0000
--- lisp/progmodes/cc-engine.el	2011-02-04 22:12:46 +0000
***************
*** 5455,5463 ****
  	    (goto-char start)
  	    nil))
  
!       (forward-char)
  
        (unless (looking-at c-<-op-cont-regexp)
  	(while (and
  		(progn
  		  (c-forward-syntactic-ws)
--- 5455,5465 ----
  	    (goto-char start)
  	    nil))
  
!       (forward-char) ; Forward over the opening '<'.
  
        (unless (looking-at c-<-op-cont-regexp)
+ 	;; go forward one non-alphanumeric character (group) per iteration of
+ 	;; this loop.
  	(while (and
  		(progn
  		  (c-forward-syntactic-ws)
***************
*** 5486,5492 ****
  			    (c-forward-type)
  			    (c-forward-syntactic-ws))))))
  
! 		  (setq pos (point))
  
  		  ;; Note: These regexps exploit the match order in \| so
  		  ;; that "<>" is matched by "<" rather than "[^>:-]>".
--- 5488,5494 ----
  			    (c-forward-type)
  			    (c-forward-syntactic-ws))))))
  
! 		  (setq pos (point))	; e.g. first token inside the '<'
  
  		  ;; Note: These regexps exploit the match order in \| so
  		  ;; that "<>" is matched by "<" rather than "[^>:-]>".
***************
*** 5522,5559 ****
  		  ;; Either an operator starting with '<' or a nested arglist.
  		  (setq pos (point))
  		  (let (id-start id-end subres keyword-match)
! 		    (if (if (looking-at c-<-op-cont-regexp)
! 			    (setq tmp (match-end 0))
! 			  (setq tmp pos)
! 			  (backward-char)
! 			  (not
! 			   (and
! 
! 			    (save-excursion
! 			      ;; There's always an identifier before an angle
! 			      ;; bracket arglist, or a keyword in
! 			      ;; `c-<>-type-kwds' or `c-<>-arglist-kwds'.
! 			      (c-backward-syntactic-ws)
! 			      (setq id-end (point))
! 			      (c-simple-skip-symbol-backward)
! 			      (when (or (setq keyword-match
! 					      (looking-at c-opt-<>-sexp-key))
! 					(not (looking-at c-keywords-regexp)))
! 				(setq id-start (point))))
! 
! 			    (setq subres
! 				  (let ((c-promote-possible-types t)
! 					(c-record-found-types t))
! 				    (c-forward-<>-arglist-recur
! 				     (and keyword-match
! 					  (c-keyword-member
! 					   (c-keyword-sym (match-string 1))
! 					   'c-<>-type-kwds)))))
! 			    )))
! 
! 			;; It was not an angle bracket arglist.
! 			(goto-char tmp)
! 
  		      ;; It was an angle bracket arglist.
  		      (setq c-record-found-types subres)
  
--- 5524,5558 ----
  		  ;; Either an operator starting with '<' or a nested arglist.
  		  (setq pos (point))
  		  (let (id-start id-end subres keyword-match)
! 		    (cond
! 		     ;; The '<' begins a multi-char operator.
! 		     ((looking-at c-<-op-cont-regexp)
! 		      (setq tmp (match-end 0))
! 		      (goto-char (match-end 0)))
! 		     ;; We're at a nested <.....>
! 		     ((progn
! 			(setq tmp pos)
! 			(backward-char)	; to the '<'
! 			(and
! 			 (save-excursion
! 			   ;; There's always an identifier before an angle
! 			   ;; bracket arglist, or a keyword in `c-<>-type-kwds'
! 			   ;; or `c-<>-arglist-kwds'.
! 			   (c-backward-syntactic-ws)
! 			   (setq id-end (point))
! 			   (c-simple-skip-symbol-backward)
! 			   (when (or (setq keyword-match
! 					   (looking-at c-opt-<>-sexp-key))
! 				     (not (looking-at c-keywords-regexp)))
! 			     (setq id-start (point))))
! 			 (setq subres
! 			       (let ((c-promote-possible-types t)
! 				     (c-record-found-types t))
! 				 (c-forward-<>-arglist-recur
! 				  (and keyword-match
! 				       (c-keyword-member
! 					(c-keyword-sym (match-string 1))
! 					'c-<>-type-kwds)))))))
  		      ;; It was an angle bracket arglist.
  		      (setq c-record-found-types subres)
  
***************
*** 5567,5574 ****
  				   (c-forward-syntactic-ws)
  				   (looking-at c-opt-identifier-concat-key)))
  			    (c-record-ref-id (cons id-start id-end))
! 			  (c-record-type-id (cons id-start id-end))))))
! 		  t)
  
  		 ((and (not c-restricted-<>-arglists)
  		       (or (and (eq (char-before) ?&)
--- 5566,5578 ----
  				   (c-forward-syntactic-ws)
  				   (looking-at c-opt-identifier-concat-key)))
  			    (c-record-ref-id (cons id-start id-end))
! 			  (c-record-type-id (cons id-start id-end)))))
! 
! 		     ;; At a "less than" operator.
! 		     (t
! 		      (forward-char)
! 		      )))
! 		  t)			; carry on looping.
  
  		 ((and (not c-restricted-<>-arglists)
  		       (or (and (eq (char-before) ?&)

=== modified file 'lisp/progmodes/cc-fonts.el'
*** lisp/progmodes/cc-fonts.el	2011-01-25 04:08:28 +0000
--- lisp/progmodes/cc-fonts.el	2011-02-04 22:10:01 +0000
***************
*** 1082,1088 ****
  	     (boundp 'parse-sexp-lookup-properties))))
  
        ;; Below we fontify a whole declaration even when it crosses the limit,
!       ;; to avoid gaps when lazy-lock fontifies the file a screenful at a
        ;; time.  That is however annoying during editing, e.g. the following is
        ;; a common situation while the first line is being written:
        ;;
--- 1082,1088 ----
  	     (boundp 'parse-sexp-lookup-properties))))
  
        ;; Below we fontify a whole declaration even when it crosses the limit,
!       ;; to avoid gaps when jit/lazy-lock fontifies the file a block at a
        ;; time.  That is however annoying during editing, e.g. the following is
        ;; a common situation while the first line is being written:
        ;;
***************
*** 1094,1102 ****
        ;; "some_other_variable" as an identifier, and the latter will not
        ;; correct itself until the second line is changed.  To avoid that we
        ;; narrow to the limit if the region to fontify is a single line.
!       (narrow-to-region
!        (point-min)
!        (if (<= limit (c-point 'bonl))
  	   (save-excursion
  	     ;; Narrow after any operator chars following the limit though,
  	     ;; since those characters can be useful in recognizing a
--- 1094,1102 ----
        ;; "some_other_variable" as an identifier, and the latter will not
        ;; correct itself until the second line is changed.  To avoid that we
        ;; narrow to the limit if the region to fontify is a single line.
!       (if (<= limit (c-point 'bonl))
! 	  (narrow-to-region
! 	   (point-min)
  	   (save-excursion
  	     ;; Narrow after any operator chars following the limit though,
  	     ;; since those characters can be useful in recognizing a
***************
*** 1104,1111 ****
  	     ;; after the header).
  	     (goto-char limit)
  	     (skip-chars-forward c-nonsymbol-chars)
! 	     (point))
! 	 limit))
  
        (c-find-decl-spots
         limit
--- 1104,1110 ----
  	     ;; after the header).
  	     (goto-char limit)
  	     (skip-chars-forward c-nonsymbol-chars)
! 	     (point))))
  
        (c-find-decl-spots
         limit




-- 
Alan Mackenzie (Nuremberg, Germany).




Information forwarded to owner <at> debbugs.gnu.org, bug-gnu-emacs <at> gnu.org, bug-cc-mode <at> gnu.org:
bug#7722; Package emacs,cc-mode. (Sun, 06 Feb 2011 19:12:01 GMT) Full text and rfc822 format available.

Message #25 received at 7722 <at> debbugs.gnu.org (full text, mbox):

From: Tassilo Horn <tassilo <at> member.fsf.org>
To: Alan Mackenzie <acm <at> muc.de>
Cc: 7722 <at> debbugs.gnu.org, Chong Yidong <cyd <at> stupidchicken.com>
Subject: Re: bug#7722: 24.0.50;
	Finding this C++ header file drops emacs into a infinite loop
Date: Sun, 06 Feb 2011 20:20:30 +0100
Alan Mackenzie <acm <at> muc.de> writes:

Hi Alan,

> Here's a putative patch for the problem.  I've refactored the
> offending function by replacing obscenely nested `if'-forms with a
> simple `cond'.  I've also removed some narrowing (to the 500n limit)
> which should help jit-lock, hopefully without hurting too much
> elsewhere.
>
> Tassilo, would you try out the patch, please, and let me know how it
> goes.  Thanks!

Seems to work fine.  I had no problems visiting that bad header file.

Bye,
Tassilo




Information forwarded to owner <at> debbugs.gnu.org, bug-gnu-emacs <at> gnu.org, bug-cc-mode <at> gnu.org:
bug#7722; Package emacs,cc-mode. (Sat, 12 Feb 2011 01:17:02 GMT) Full text and rfc822 format available.

Message #28 received at 7722 <at> debbugs.gnu.org (full text, mbox):

From: Chong Yidong <cyd <at> stupidchicken.com>
To: Alan Mackenzie <acm <at> muc.de>
Cc: 7722 <at> debbugs.gnu.org, Tassilo Horn <tassilo <at> member.fsf.org>
Subject: Re: bug#7722: 24.0.50;
	Finding this C++ header file drops emacs into a infinite loop
Date: Fri, 11 Feb 2011 20:25:06 -0500
Alan Mackenzie <acm <at> muc.de> writes:

> It was indeed such a loop.  It was caused by a 500n jit-lock boundary
> falling in the middle of a template construct, hence the "necessity" of
> all the whitespace to reproduce the failure.
>
> Here's a putative patch for the problem.  I've refactored the offending
> function by replacing obscenely nested `if'-forms with a simple `cond'.
> I've also removed some narrowing (to the 500n limit) which should help
> jit-lock, hopefully without hurting too much elsewhere.
>
> Tassilo, would you try out the patch, please, and let me know how it
> goes.  Thanks!

Thanks.  This patch doesn't apply cleanly to the emacs-23 branch.  Do
you think we could apply it to the trunk, and just use the workaround in
the branch (some of these logic changes don't look obvious to me)?




Information forwarded to owner <at> debbugs.gnu.org, bug-gnu-emacs <at> gnu.org, bug-cc-mode <at> gnu.org:
bug#7722; Package emacs,cc-mode. (Sun, 13 Feb 2011 11:56:02 GMT) Full text and rfc822 format available.

Message #31 received at 7722 <at> debbugs.gnu.org (full text, mbox):

From: Alan Mackenzie <acm <at> muc.de>
To: Chong Yidong <cyd <at> stupidchicken.com>
Cc: 7722 <at> debbugs.gnu.org, Tassilo Horn <tassilo <at> member.fsf.org>
Subject: Re: bug#7722: 24.0.50;
	Finding this C++ header file drops emacs into a infinite loop
Date: Sun, 13 Feb 2011 12:20:44 +0000
Hi, Yidong!

On Fri, Feb 11, 2011 at 08:25:06PM -0500, Chong Yidong wrote:
> Alan Mackenzie <acm <at> muc.de> writes:

> > It was indeed such a loop.  It was caused by a 500n jit-lock boundary
> > falling in the middle of a template construct, hence the "necessity" of
> > all the whitespace to reproduce the failure.

> > Here's a putative patch for the problem.  I've refactored the offending
> > function by replacing obscenely nested `if'-forms with a simple `cond'.
> > I've also removed some narrowing (to the 500n limit) which should help
> > jit-lock, hopefully without hurting too much elsewhere.

> > Tassilo, would you try out the patch, please, and let me know how it
> > goes.  Thanks!

> Thanks.  This patch doesn't apply cleanly to the emacs-23 branch.

That surprises me.  Would you like me to rework the patch so that it
does?

> Do you think we could apply it to the trunk, and just use the
> workaround in the branch ....

To be honest, I haven't really looked at the workaround.  I suppose it
would be OK.  However, the patched version passed all the CC Mode
regression tests (which are about half indentation, half font-locking),
so I'm fairly confident about it.

> .... (some of these logic changes don't look obvious to me)?

One of the fixes was removing a `narrow-to-region' around the region
being fontified.  In a jit-lock 500-byte chunk, this had the effect of
cutting necessary context off the end.

The other change was basically to refactor, in which the infinite looping
disappeared in the wash.  Although I could get edebug going on this loop,
the source was just too complicated to be worthwhile trying to understand
in detail.  (Believe me, I tried.  :-)

Incidentally, I'm not getting mail from emacs-devel or bug-gnu-emacs at
the moment, and I've not got enough energy to do anything about it.  Do
you know anything specific which might be doing this to me?

-- 
Alan Mackenzie (Nuremberg, Germany).




Information forwarded to owner <at> debbugs.gnu.org, bug-gnu-emacs <at> gnu.org, bug-cc-mode <at> gnu.org:
bug#7722; Package emacs,cc-mode. (Sun, 13 Feb 2011 20:33:01 GMT) Full text and rfc822 format available.

Message #34 received at 7722 <at> debbugs.gnu.org (full text, mbox):

From: Chong Yidong <cyd <at> stupidchicken.com>
To: Alan Mackenzie <acm <at> muc.de>
Cc: 7722 <at> debbugs.gnu.org, Tassilo Horn <tassilo <at> member.fsf.org>
Subject: Re: bug#7722: 24.0.50;
	Finding this C++ header file drops emacs into a infinite loop
Date: Sun, 13 Feb 2011 15:41:45 -0500
Alan Mackenzie <acm <at> muc.de> writes:

>> Thanks.  This patch doesn't apply cleanly to the emacs-23 branch.
>
> That surprises me.  Would you like me to rework the patch so that it
> does?

I took a stab at it, but I'm not familiar enough with the code to do the
job.  Here's an example of a mismatch.  In your patch, you have:

***************
*** 5486,5492 ****
                           (c-forward-type)
                           (c-forward-syntactic-ws))))))

!                 (setq pos (point))

                 ;; Note: These regexps exploit the match order in \| so
                 ;; that "<>" is matched by "<" rather than "[^>:-]>".
--- 5488,5494 ----
                           (c-forward-type)
                           (c-forward-syntactic-ws))))))

!                 (setq pos (point))    ; e.g. first token inside the '<'

                 ;; Note: These regexps exploit the match order in \| so
                 ;; that "<>" is matched by "<" rather than "[^>:-]>".


but in the branch, the relevant part of the code looks like this:

          ;; Must check for '>' at the very start separately,
          ;; since the regexp below has to avoid ">>" without
          ;; using \\=.
          (forward-char)
          t)

        ;; Note: These regexps exploit the match order in \| so
        ;; that "<>" is matched by "<" rather than "[^>:-]>".

This code was altered during Nathaniel Flath's changes for Java 5
support, back in July, which was (rightly) not committed to the branch:

  revno: 100951
  committer: Alan Mackenzie <acm <at> muc.de>
  branch nick: trunk
  timestamp: Sat 2010-07-31 20:01:08 +0000
  message:
  Enhance Java Mode to handle Java 5.0 (Tiger) and Java 6 (Mustang).
  Contributed by Nathaniel Flath.

Any suggestions? :-/




bug marked as fixed in version 24.1, send any further explanations to 7722 <at> debbugs.gnu.org and Tassilo Horn <tassilo <at> member.fsf.org> Request was from Glenn Morris <rgm <at> gnu.org> to control <at> debbugs.gnu.org. (Wed, 29 Jun 2011 21:15:03 GMT) Full text and rfc822 format available.

bug archived. Request was from Debbugs Internal Request <help-debbugs <at> gnu.org> to internal_control <at> debbugs.gnu.org. (Thu, 28 Jul 2011 11:24:03 GMT) Full text and rfc822 format available.

This bug report was last modified 14 years and 19 days ago.

Previous Next


GNU bug tracking system
Copyright (C) 1999 Darren O. Benham, 1997,2003 nCipher Corporation Ltd, 1994-97 Ian Jackson.