[llvm] [FileCheck] Improve printing variables with escapes (PR #145865)

Thomas Preud'homme via llvm-commits llvm-commits at lists.llvm.org
Thu Jun 26 04:47:44 PDT 2025


================
@@ -274,14 +274,55 @@ Expected<std::string> NumericSubstitution::getResult() const {
   return Format.getMatchingString(*EvaluatedValue);
 }
 
-Expected<std::string> StringSubstitution::getResult() const {
+Expected<std::string> NumericSubstitution::getResultForDiagnostics() const {
+  // The "regex" returned by getResultRegex() is just a numeric value
+  // like '42', '0x2A', '-17', 'DEADBEEF' etc. This is already suitable for use in diagnostics.
+  Expected<std::string> Literal = getResultRegex();
+  if (!Literal)
+    return Literal;
+
+  return "\"" + std::move(*Literal) + "\"";
+}
+
+Expected<std::string> StringSubstitution::getResultRegex() const {
   // Look up the value and escape it so that we can put it into the regex.
   Expected<StringRef> VarVal = Context->getPatternVarValue(FromStr);
   if (!VarVal)
     return VarVal.takeError();
   return Regex::escape(*VarVal);
 }
 
+Expected<std::string> StringSubstitution::getResultForDiagnostics() const {
+    Expected<StringRef> VarVal = Context->getPatternVarValue(FromStr);
+    if (!VarVal)
+      return VarVal.takeError();
+
+    std::string Result;
+    Result.reserve(VarVal->size() + 2);
+    raw_string_ostream OS(Result);
+
+    OS << '"';
+    // Escape the string if it contains any characters that
+    // make it hard to read, such as tabs, newlines, quotes, and non-printable characters.
+    // Note that we do not include backslashes in this set, because they are
+    // common in Windows paths and escaping them would make the output
+    // harder to read.
+    // However, when we do escape, backslashes are escaped as well,
+    // otherwise the output would be ambiguous.
+    const bool NeedsEscaping = llvm::any_of(*VarVal, [](char C) {
+      return C == '\t' || C == '\n' || C == '"' || !isPrint(C);
----------------
RoboTux wrote:

Sounds good.

https://github.com/llvm/llvm-project/pull/145865


More information about the llvm-commits mailing list