Subject: 24.3.92; cedet: semanticdb-needs-refresh-p sometimes report (wrong-type-argument number-or-marker-p nil) error

From: Kan-Ru Chen (陳侃如) <[email-masked]>
Date: Fri, 01 Aug 2014 17:06:14 +0800

Sometimes when semanticdb-needs-refresh-p is called on a non-existing
file it will report (wrong-type-argument number-or-marker-p nil)

The backtrace is too large so I attached a cropped image instead.

Tentative patch:

diff --git a/lisp/cedet/semantic/db.el b/lisp/cedet/semantic/db.el
index 76a49dd..0e68cb5 100644
*** a/lisp/cedet/semantic/db.el
--- b/lisp/cedet/semantic/db.el
***************
*** 593,609 ****
  	  )
        ;; Buffer isn't loaded.  The only clue we have is if the file
        ;; is somehow different from our mark in the semanticdb table.
        (let* ((stats (file-attributes ff))
  	     (actualsize (nth 7 stats))
  	     (actualmod (nth 5 stats))
  	     )
  
! 	(or (not (slot-boundp obj 'tags))
  	    ;; (not (oref obj tags)) -->  not needed anymore?
  	    (/= (or (oref obj fsize) 0) actualsize)
  	    (not (equal (oref obj lastmodtime) actualmod))
  	    )
  	))))
  
  
  ;;; Synchronization
--- 593,610 ----
  	  )
        ;; Buffer isn't loaded.  The only clue we have is if the file
        ;; is somehow different from our mark in the semanticdb table.
        (let* ((stats (file-attributes ff))
  	     (actualsize (nth 7 stats))
  	     (actualmod (nth 5 stats))
  	     )
  
! 	(or (not stats)
! 	    (not (slot-boundp obj 'tags))
  	    ;; (not (oref obj tags)) -->  not needed anymore?
  	    (/= (or (oref obj fsize) 0) actualsize)
  	    (not (equal (oref obj lastmodtime) actualmod))
  	    )
  	))))
  
  
  ;;; Synchronization

In GNU Emacs 24.3.92.3 (x86_64-unknown-linux-gnu, GTK+ Version 2.24.10)
 of 2014-08-01 on kanru-mozilla
Windowing system distributor `The X.Org Foundation', version 11.0.11204000
System Description:	Debian GNU/Linux 7.6 (wheezy)