D104366 introduced a new llvm-cxxfilt test with non-ASCII characters,
which caused a failure on llvm-clang-x86_64-expensive-checks-win
builder, with a stack trace suggesting issue in a call to isalnum.
The argument to isalnum should be either EOF or a value that is
representable in the type unsigned char. The llvm-cxxfilt does not
perform a cast from char to unsigned char before the call, so the
value might be out of valid range.
Replace the call to isalnum with isAlnum from StringExtras, which takes
a char as the argument. This also makes the check independent of the
current locale.
Differential Revision: https://reviews.llvm.org/D110986
RUN: '_Z3Foo|' \
RUN: '_Z3Foo}' \
RUN: '_Z3Foo~,,' \
+RUN: '_Z3Foo⦙_Z3Bar' \
RUN: '_Z3Foo,,_Z3Bar::_Z3Baz _Z3Foo,_Z3Bar:_Z3Baz' \
RUN: '_Z3Foo$ ._Z3Foo' | llvm-cxxfilt -n | FileCheck %s
CHECK: Foo|
CHECK: Foo}
CHECK: Foo~,,
+CHECK: Foo⦙Bar
CHECK: Foo,,Bar::Baz Foo,Bar:Baz
CHECK: _Z3Foo$ ._Z3Foo
static bool IsLegalItaniumChar(char C) {
// Itanium CXX ABI [External Names]p5.1.1:
// '$' and '.' in mangled names are reserved for private implementations.
- return isalnum(C) || C == '.' || C == '$' || C == '_';
+ return isAlnum(C) || C == '.' || C == '$' || C == '_';
}
// If 'Split' is true, then 'Mangled' is broken into individual words and each