D79276 caused the following builder to fail:
http://lab.llvm.org:8011/builders/llvm-clang-x86_64-expensive-checks-win/builds/23489
Specifically, FileCheck dumped stack in the following tests:
LLVM :: MC/Mips/micromips-jump-pc-region.s LLVM :: MC/Mips/mips-jump-pc-region.s
Those tests contained characters encoded as 160 but that render (at
least for me in vim) like a single space (32). Those characters
appeared between the # and RUN: on several lines, and D79276
caused FileCheck to process those lines differently: RUN: is a
comment directive. As a result, D79276 caused FileCheck to start
calling is isalnum on those characters.
The problem is that FileCheck calls isalnum on type char without
casting to unsigned char first, so it sign-extends 160 beyond what
unsigned char or EOF can represent. C says that has undefined
behavior. This problem is general to FileCheck's prefix parsing and
so exists independently of D79276.
524457edbc3d fixed the above tests. This patch changes FileCheck to
use LLVM's replacements for ctype.h functions, and it adds tests for
cases that are representative with or without D79276.
Nit: I have a marginal preference for where CHECKs like this aren't shared to interleave them with the RUN lines, i.e.
It makes it slightly easier to follow each individual case. I might be inclined to move the input similarly, but I don't feel strongly about that one either way.