Subject: CC Mode 5.33 (Emacs-Lisp); Faces applied in wrong order on "#ifndef"

From: Jordan Wade <[email-masked]>
Date: Fri, 24 Mar 2017 16:49:12 +0000

When fontifying '#ifndef', cc-mode applies font-lock-preprocessor-face
to the entire string and also font-lock-negation-char-face to the 'n'.
Preprocessor-face is applied on top of negation-char-face; I think it
should be the other way around.

Describe-char says that both faces are applied.  The theme I use
(base16-default-light) only sets :foreground for both faces; if I set
(for example) :weight bold on negation-char-face, the bold shows
through on the 'n', though :foreground continues to be set from
preprocessor-face, confirming that both faces are applied and that
preprocessor-face is overriding negation-char-face.

Emacs  : GNU Emacs 25.1.1 (x86_64-w64-mingw32)
 of 2016-09-22
Package: CC Mode 5.33 (Emacs-Lisp)
Buffer Style: nil
c-emacs-features: (pps-extended-state col-0-paren posix-char-classes gen-string-delim gen-comment-delim syntax-properties category-properties 1-bit)

current state:
==============
(setq
 c-basic-offset 'set-from-style
 c-comment-only-line-offset 'set-from-style
 c-indent-comment-alist 'set-from-style
 c-indent-comments-syntactically-p 'set-from-style
 c-block-comment-prefix 'set-from-style
 c-comment-prefix-regexp 'set-from-style
 c-doc-comment-style 'set-from-style
 c-cleanup-list 'set-from-style
 c-hanging-braces-alist 'set-from-style
 c-hanging-colons-alist 'set-from-style
 c-hanging-semi&comma-criteria 'set-from-style
 c-backslash-column 'set-from-style
 c-backslash-max-column 'set-from-style
 c-special-indent-hook nil
 c-label-minimum-indentation 'set-from-style
 c-offsets-alist nil
 c-buffer-is-cc-mode nil
 c-tab-always-indent t
 c-syntactic-indentation t
 c-syntactic-indentation-in-macros t
 c-ignore-auto-fill '(string cpp code)
 c-auto-align-backslashes t
 c-backspace-function 'backward-delete-char-untabify
 c-delete-function 'delete-char
 c-electric-pound-behavior nil
 c-default-style '((java-mode . "java") (awk-mode . "awk") (other . "linux"))
 c-enable-xemacs-performance-kludge-p nil
 c-old-style-variable-behavior nil
 defun-prompt-regexp nil
 tab-width 8
 comment-column 40
 parse-sexp-ignore-comments t
 parse-sexp-lookup-properties nil
 auto-fill-function nil
 comment-multi-line nil
 comment-start-skip ";+ *"
 fill-prefix nil
 fill-column 70
 paragraph-start "\f\\|[ 	]*$"
 adaptive-fill-mode t
 adaptive-fill-regexp "[ 	]*\\([-–!|#%;>*·•‣⁃◦]+[ 	]*\\)*"
 )

-- Jordan Wade <[email-masked]>