[llvm-cxxfilt] Replace isalnum with isAlnum from StringExtras
authorTomasz Miąsko <tomasz.miasko@gmail.com>
Sat, 2 Oct 2021 05:58:54 +0000 (07:58 +0200)
committerTomasz Miąsko <tomasz.miasko@gmail.com>
Sat, 2 Oct 2021 06:54:04 +0000 (08:54 +0200)
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

llvm/test/tools/llvm-cxxfilt/delimiters.test
llvm/tools/llvm-cxxfilt/llvm-cxxfilt.cpp

index 1c5b0e3..c1eb05d 100644 (file)
@@ -27,6 +27,7 @@ RUN:      "\"_Z3Foo{\"" \
 RUN:      '_Z3Foo|'   \
 RUN:      '_Z3Foo}'   \
 RUN:      '_Z3Foo~,,' \
+RUN:      '_Z3Foo⦙_Z3Bar' \
 RUN:      '_Z3Foo,,_Z3Bar::_Z3Baz  _Z3Foo,_Z3Bar:_Z3Baz' \
 RUN:      '_Z3Foo$ ._Z3Foo' | llvm-cxxfilt -n | FileCheck %s
 
@@ -59,5 +60,6 @@ CHECK: Foo{
 CHECK: Foo|
 CHECK: Foo}
 CHECK: Foo~,,
+CHECK: Foo⦙Bar
 CHECK: Foo,,Bar::Baz  Foo,Bar:Baz
 CHECK: _Z3Foo$ ._Z3Foo
index d8bf8db..0a6d4b5 100644 (file)
@@ -128,7 +128,7 @@ static void SplitStringDelims(
 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