+ Use functions, not macros, for up- and down-casing (Bug#8254).
+ * buffer.h (DOWNCASE_TABLE, UPCASE_TABLE, DOWNCASE, UPPERCASEP):
+ (NOCASEP, LOWERCASEP, UPCASE, UPCASE1): Remove. All callers changed
+ to use the following functions instead of these macros.
+ (downcase): Adjust to lack of DOWNCASE_TABLE. Return int, not
+ EMACS_INT, since callers assume the returned value fits in int.
+ (upcase1): Likewise, for UPCASE_TABLE.
+ (uppercasep, lowercasep, upcase): New static inline functions.
+ * editfns.c (Fchar_equal): Remove no-longer-needed workaround for
+ the race-condition problem in the old DOWNCASE.
+
+ * regex.c (CHARSET_LOOKUP_RANGE_TABLE_RAW, POP_FAILURE_REG_OR_COUNT):
+ Rename locals to avoid shadowing.
+ (regex_compile, re_match_2_internal): Move locals to avoid shadowing.
+ (regex_compile, re_search_2, re_match_2_internal):
+ Remove unused local vars.
+ (FREE_VAR): Rewrite so as not to use empty "else",
+ which gcc can warn about.
+ (regex_compile, re_match_2_internal): Mark locals as initialized.
+ (RETALLOC_IF): Define only if needed.
+ (WORDCHAR_P): Likewise. This one is never needed, but is used
+ only in a comment talking about a compiler bug, so put inside
+ the #if 0 of that comment.
+ (CHARSET_LOOKUP_BITMAP, FAIL_STACK_FULL, RESET_FAIL_STACK):
+ (PUSH_FAILURE_ELT, BUF_PUSH_3, STOP_ADDR_VSTRING):
+ Remove; unused.
+
+ * search.c (boyer_moore): Rename locals to avoid shadowing.
+ * character.h (FETCH_STRING_CHAR_AS_MULTIBYTE_ADVANCE): Likewise.
+
+ * search.c (simple_search): Remove unused var.
+
+ * dired.c (compile_pattern): Move decl from here ...
+ * lisp.h: ... to here, so that it can be checked.
+ (struct re_registers): New forward decl.
+
+ * character.h (INC_POS, DEC_POS): Rename locals to avoid shadowing.
+
+ * indent.c (MULTIBYTE_BYTES_WIDTH): New args bytes, width.
+ All uses changed.
+ (MULTIBYTE_BYTES_WIDTH, scan_for_column, compute_motion):
+ Rename locals to avoid shadowing.
+ (Fvertical_motion): Mark locals as initialized.
+
+ * casefiddle.c (casify_object, casify_region): Now static.
+ (casify_region): Mark local as initialized.
+
+ * cmds.c (internal_self_insert): Rename local to avoid shadowing.
+
+ * lisp.h (GCPRO2_VAR, GCPRO3_VAR, GCPRO4_VAR, GCPRO5_VAR, GCPRO6_VAR):
+ New macros, so that the caller can use some names other than
+ gcpro1, gcpro2, etc.
+ (GCPRO2, GCPRO3, GCPRO4, GCPRO5, GCPRO6): Reimplement in terms
+ of the new macros.
+ (GCPRO1_VAR, UNGCPRO_VAR): Change the meaning of the second
+ argument, for consistency with GCPRO2_VAR, etc: it is now the
+ prefix of the variable, not the variable itself. All uses
+ changed.
+ * dired.c (directory_files_internal, file_name_completion):
+ Rename locals to avoid shadowing.
+
+ Fix a race condition diagnosed by gcc -Wsequence-point (Bug#8254).
+ An expression of the form (DOWNCASE (x) == DOWNCASE (y)), found in
+ dired.c's scmp function, had undefined behavior.
+ * lisp.h (DOWNCASE_TABLE, UPCASE_TABLE, DOWNCASE, UPPERCASEP):
+ (NOCASEP, LOWERCASEP, UPCASE, UPCASE1): Move from here ...
+ * buffer.h: ... to here, because these macros use current_buffer,
+ and the new implementation with inline functions needs to have
+ current_buffer in scope now, rather than later when the macros
+ are used.
+ (downcase, upcase1): New static inline functions.
+ (DOWNCASE, UPCASE1): Reimplement using these functions.
+ This avoids undefined behavior in expressions like
+ DOWNCASE (x) == DOWNCASE (y), which previously suffered
+ from race conditions in accessing the global variables
+ case_temp1 and case_temp2.
+ * casetab.c (case_temp1, case_temp2): Remove; no longer needed.
+ * lisp.h (case_temp1, case_temp2): Remove their decls.
+ * character.h (ASCII_CHAR_P): Move from here ...
+ * lisp.h: ... to here, so that the inline functions mentioned
+ above can use them.
+
+ * dired.c (directory_files_internal_unwind): Now static.
+