2014-08-02 Paul Eggert <eggert@cs.ucla.edu>
+ Fix bug with clang + directory_files_internal + GC (Bug#16986).
+ * dired.c (directory_files_internal): Use a volatile variable
+ to prevent the compiler from optimizing away all copies of a local.
+ I wonder how many other GC-related bugs like this lurk elsewhere?
+
Avoid 100% CPU utilization on ssh session exit (Bug#17691).
* xterm.h (struct x_display_info): New member 'connection'.
* xterm.c (x_term_init, x_delete_terminal): Set and use it,
Lisp_Object w32_save = Qnil;
#endif
+ /* Don't let the compiler optimize away all copies of DIRECTORY,
+ which would break GC; see Bug#16986. Although this is required
+ only in the common case where GC_MARK_STACK == GC_MAKE_GCPROS_NOOPS,
+ it shouldn't break anything in the other cases. */
+ Lisp_Object volatile directory_volatile = directory;
+
/* Because of file name handlers, these functions might call
Ffuncall, and cause a GC. */
list = encoded_directory = dirfilename = Qnil;
list = Fsort (Fnreverse (list),
attrs ? Qfile_attributes_lessp : Qstring_lessp);
+ (void) directory_volatile;
RETURN_UNGCPRO (list);
}