xtkoba created this revision. Herald added a project: All. xtkoba requested review of this revision. Herald added a project: clang. Herald added a subscriber: cfe-commits.
When a `#warning` directive is followed by tokens containing non-ASCII characters encoded in UTF-8, a broken string can be printed out as a diagnostic message on some systems. This is because the current code assumes `char` to be `signed char`, whereas on some systems `char` is in fact `unsigned char`. Repository: rG LLVM Github Monorepo https://reviews.llvm.org/D125620 Files: clang/lib/Basic/Diagnostic.cpp Index: clang/lib/Basic/Diagnostic.cpp =================================================================== --- clang/lib/Basic/Diagnostic.cpp +++ clang/lib/Basic/Diagnostic.cpp @@ -811,7 +811,7 @@ StringRef(DiagStr, DiagEnd - DiagStr).equals("%0") && getArgKind(0) == DiagnosticsEngine::ak_std_string) { const std::string &S = getArgStdStr(0); - for (char c : S) { + for (signed char c : S) { if (llvm::sys::locale::isPrint(c) || c == '\t') { OutStr.push_back(c); }
Index: clang/lib/Basic/Diagnostic.cpp =================================================================== --- clang/lib/Basic/Diagnostic.cpp +++ clang/lib/Basic/Diagnostic.cpp @@ -811,7 +811,7 @@ StringRef(DiagStr, DiagEnd - DiagStr).equals("%0") && getArgKind(0) == DiagnosticsEngine::ak_std_string) { const std::string &S = getArgStdStr(0); - for (char c : S) { + for (signed char c : S) { if (llvm::sys::locale::isPrint(c) || c == '\t') { OutStr.push_back(c); }
_______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits