Unknown hex escapes

Hi,
  
Given:

const char *format = "abc \m def";

clang generates:

clang -fsyntax-only foo1.c

foo1.c(1) : warning: unknown escape sequence '\x6D'
const char *format = "abc \m def";
  ^

There are a couple of problems here. Firstly, the error should clearly show
\m not \x6D and ProcessCharEscape makes a valiant attempt:

    if (isgraph(ThisTokBuf[0]))
      Diags->Report(Loc, diag::ext_unknown_escape)
        << std::string()+(char)ResultChar;
    else
      Diags->Report(Loc, diag::ext_unknown_escape)
        << "x"+llvm::utohexstr(ResultChar);

Unfortunately, by the time we're in the handling case, ThisTokBuf[0] has
stepped past the invalid escape and moved to the next character, and as
witness you get a slightly different error with this source:

clang -fsyntax-only foo1.c

foo1.c(1) : warning: unknown escape sequence '\m'
const char *format = "abc \mx def";

Now, this is correct. What ProcessCharEscape should be doing is this:

    if (isgraph(ResultChar))
      Diags->Report(Loc, diag::ext_unknown_escape)
        << std::string()+(char)ResultChar;
    else
      Diags->Report(Loc, diag::ext_unknown_escape)
        << "x"+llvm::utohexstr(ResultChar);

However the location of the caret is incorrect; perhaps I'll deal with that
next.

...ok, moving this to cfe-commits...