Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Fix SyntaxWarning messages from python 3.12 #86806

Closed
wants to merge 3 commits into from

Conversation

AngryLoki
Copy link
Contributor

This fixes "SyntaxWarning: invalid escape sequence" and "SyntaxWarning: "is" with 'int' literal", except for polly and summarizeStats.py, which won't run on Python 3.

The fix is done in every file, because otherwise with OS-wide Python 3.12 these SyntaxWarnings appear here and there, as Python 3.12 now produce a SyntaxWarning instead of DeprecationWarning.

There are no warnings anymore, which can be checked with python -m compileall -x "polly|summarizeStats.py" -d . -f -q .

This fixes "SyntaxWarning: invalid escape sequence" and "SyntaxWarning: "is" with 'int' literal",
except for polly and summarizeStats.py, which won't run on Python 3.

The fix is done in every file, because otherwise with OS-wide Python 3.12 these SyntaxWarnings appear here and there.

There are no warnings anymore, which can be checked with `python -m compileall -x "polly|summarizeStats.py" -d . -f -q .`

Signed-off-by: Sv. Lockal <lockalsash@gmail.com>
Copy link

Thank you for submitting a Pull Request (PR) to the LLVM Project!

This PR will be automatically labeled and the relevant teams will be
notified.

If you wish to, you can add reviewers by using the "Reviewers" section on this page.

If this is not working for you, it is probably because you do not have write
permissions for the repository. In which case you can instead tag reviewers by
name in a comment by using @ followed by their GitHub username.

If you have received no comments on your PR for a week, you can request a review
by "ping"ing the PR by adding a comment “Ping”. The common courtesy "ping" rate
is once a week. Please remember that you are asking for valuable time from other developers.

If you have further questions, they may be answered by the LLVM GitHub User Guide.

You can also ask questions in a comment on this PR, on the LLVM Discord or on the forums.

@llvmbot llvmbot added clang Clang issues not falling into any other category clang-tools-extra compiler-rt libc++ libc++ C++ Standard Library. Not GNU libstdc++. Not libc++abi. lld lldb clang-tidy compiler-rt:asan Address sanitizer lld:MachO mlir:sparse Sparse compiler in MLIR mlir compiler-rt:sanitizer github:workflow labels Mar 27, 2024
@llvmbot
Copy link
Collaborator

llvmbot commented Mar 27, 2024

@llvm/pr-subscribers-compiler-rt-sanitizer
@llvm/pr-subscribers-github-workflow
@llvm/pr-subscribers-libcxx
@llvm/pr-subscribers-clang-tidy
@llvm/pr-subscribers-lldb
@llvm/pr-subscribers-clang

@llvm/pr-subscribers-mlir

Author: None (AngryLoki)

Changes

This fixes "SyntaxWarning: invalid escape sequence" and "SyntaxWarning: "is" with 'int' literal", except for polly and summarizeStats.py, which won't run on Python 3.

The fix is done in every file, because otherwise with OS-wide Python 3.12 these SyntaxWarnings appear here and there, as Python 3.12 now produce a SyntaxWarning instead of DeprecationWarning.

There are no warnings anymore, which can be checked with python -m compileall -x "polly|summarizeStats.py" -d . -f -q .


Patch is 128.29 KiB, truncated to 20.00 KiB below, full version: https://github.com/llvm/llvm-project/pull/86806.diff

106 Files Affected:

  • (modified) .github/workflows/version-check.py (+1-1)
  • (modified) clang-tools-extra/clang-tidy/add_new_check.py (+6-6)
  • (modified) clang-tools-extra/clang-tidy/tool/clang-tidy-diff.py (+2-2)
  • (modified) clang-tools-extra/docs/clang-tidy/checks/gen-static-analyzer-docs.py (+1-1)
  • (modified) clang/docs/tools/dump_ast_matchers.py (+2-2)
  • (modified) clang/test/Analysis/check-analyzer-fixit.py (+1-1)
  • (modified) clang/utils/ABITest/TypeGen.py (+1-1)
  • (modified) compiler-rt/lib/asan/scripts/asan_symbolize.py (+2-2)
  • (modified) cross-project-tests/debuginfo-tests/dexter/dex/command/ParseCommand.py (+2-2)
  • (modified) cross-project-tests/lit.cfg.py (+3-3)
  • (modified) libcxx/test/libcxx/transitive_includes.gen.py (+1-1)
  • (modified) libcxx/utils/generate_escaped_output_table.py (+1-1)
  • (modified) libcxx/utils/generate_width_estimation_table.py (+1-1)
  • (modified) lld/test/MachO/tools/validate-unwind-info.py (+1-1)
  • (modified) lld/utils/benchmark.py (+1-1)
  • (modified) lldb/examples/python/crashlog.py (+4-4)
  • (modified) lldb/examples/python/delta.py (+1-1)
  • (modified) lldb/examples/python/gdbremote.py (+5-5)
  • (modified) lldb/examples/python/jump.py (+3-3)
  • (modified) lldb/examples/python/performance.py (+1-1)
  • (modified) lldb/examples/python/symbolication.py (+4-4)
  • (modified) lldb/packages/Python/lldbsuite/test/decorators.py (+1-1)
  • (modified) lldb/packages/Python/lldbsuite/test/lldbpexpect.py (+1-1)
  • (modified) lldb/packages/Python/lldbsuite/test/lldbtest.py (+1-1)
  • (modified) lldb/packages/Python/lldbsuite/test/test_runner/process_control.py (+1-1)
  • (modified) lldb/packages/Python/lldbsuite/test/tools/lldb-server/gdbremote_testcase.py (+2-2)
  • (modified) lldb/packages/Python/lldbsuite/test/tools/lldb-server/lldbgdbserverutils.py (+1-1)
  • (modified) lldb/test/API/commands/command/backticks/TestBackticksInAlias.py (+2-2)
  • (modified) lldb/test/API/commands/expression/memory-allocation/TestMemoryAllocSettings.py (+1-1)
  • (modified) lldb/test/API/commands/expression/test/TestExprs.py (+1-1)
  • (modified) lldb/test/API/commands/gui/expand-threads-tree/TestGuiExpandThreadsTree.py (+1-1)
  • (modified) lldb/test/API/commands/help/TestHelp.py (+3-3)
  • (modified) lldb/test/API/commands/process/launch-with-shellexpand/TestLaunchWithShellExpand.py (+1-1)
  • (modified) lldb/test/API/commands/register/register/TestRegistersUnavailable.py (+2-2)
  • (modified) lldb/test/API/commands/settings/TestSettings.py (+6-6)
  • (modified) lldb/test/API/commands/target/basic/TestTargetCommand.py (+1-1)
  • (modified) lldb/test/API/commands/target/dump-separate-debug-info/dwo/TestDumpDwo.py (+10-10)
  • (modified) lldb/test/API/commands/target/dump-separate-debug-info/oso/TestDumpOso.py (+11-11)
  • (modified) lldb/test/API/commands/trace/TestTraceDumpInfo.py (+1-1)
  • (modified) lldb/test/API/commands/trace/TestTraceEvents.py (+2-2)
  • (modified) lldb/test/API/commands/trace/TestTraceStartStop.py (+6-6)
  • (modified) lldb/test/API/commands/trace/TestTraceTSC.py (+5-5)
  • (modified) lldb/test/API/driver/quit_speed/TestQuitWithProcess.py (+1-1)
  • (modified) lldb/test/API/functionalities/breakpoint/breakpoint_by_line_and_column/TestBreakpointByLineAndColumn.py (+1-1)
  • (modified) lldb/test/API/functionalities/breakpoint/breakpoint_locations/TestBreakpointLocations.py (+2-2)
  • (modified) lldb/test/API/functionalities/data-formatter/data-formatter-advanced/TestDataFormatterAdv.py (+3-3)
  • (modified) lldb/test/API/functionalities/data-formatter/data-formatter-cpp/TestDataFormatterCpp.py (+3-3)
  • (modified) lldb/test/API/functionalities/data-formatter/data-formatter-objc/TestDataFormatterObjCNSContainer.py (+8-8)
  • (modified) lldb/test/API/functionalities/data-formatter/data-formatter-skip-summary/TestDataFormatterSkipSummary.py (+1-1)
  • (modified) lldb/test/API/functionalities/data-formatter/data-formatter-stl/generic/unordered/TestDataFormatterGenericUnordered.py (+11-11)
  • (modified) lldb/test/API/functionalities/data-formatter/data-formatter-stl/libcxx/atomic/TestLibCxxAtomic.py (+1-1)
  • (modified) lldb/test/API/functionalities/data-formatter/data-formatter-stl/libcxx/initializerlist/TestInitializerList.py (+1-1)
  • (modified) lldb/test/API/functionalities/data-formatter/type_summary_list_arg/TestTypeSummaryListArg.py (+2-2)
  • (modified) lldb/test/API/functionalities/memory-region/TestMemoryRegion.py (+1-1)
  • (modified) lldb/test/API/functionalities/target_var/TestTargetVar.py (+1-1)
  • (modified) lldb/test/API/iohandler/completion/TestIOHandlerCompletion.py (+1-1)
  • (modified) lldb/test/API/lang/c/function_types/TestFunctionTypes.py (+1-1)
  • (modified) lldb/test/API/lang/c/register_variables/TestRegisterVariables.py (+1-1)
  • (modified) lldb/test/API/lang/c/set_values/TestSetValues.py (+2-2)
  • (modified) lldb/test/API/lang/c/strings/TestCStrings.py (+1-1)
  • (modified) lldb/test/API/lang/c/tls_globals/TestTlsGlobals.py (+4-4)
  • (modified) lldb/test/API/lang/cpp/char1632_t/TestChar1632T.py (+4-4)
  • (modified) lldb/test/API/lang/cpp/class_static/TestStaticVariables.py (+2-2)
  • (modified) lldb/test/API/lang/cpp/class_types/TestClassTypes.py (+1-1)
  • (modified) lldb/test/API/lang/cpp/dynamic-value/TestDynamicValue.py (+1-1)
  • (modified) lldb/test/API/lang/cpp/namespace/TestNamespace.py (+2-2)
  • (modified) lldb/test/API/lang/cpp/signed_types/TestSignedTypes.py (+2-2)
  • (modified) lldb/test/API/lang/cpp/unsigned_types/TestUnsignedTypes.py (+1-1)
  • (modified) lldb/test/API/lang/mixed/TestMixedLanguages.py (+2-2)
  • (modified) lldb/test/API/lang/objc/foundation/TestObjCMethods.py (+1-1)
  • (modified) lldb/test/API/lang/objc/foundation/TestObjCMethodsNSArray.py (+5-5)
  • (modified) lldb/test/API/lang/objc/foundation/TestObjCMethodsNSError.py (+1-1)
  • (modified) lldb/test/API/lang/objc/foundation/TestObjCMethodsString.py (+5-5)
  • (modified) lldb/test/API/lang/objc/objc-dynamic-value/TestObjCDynamicValue.py (+1-1)
  • (modified) lldb/test/API/lang/objcxx/objc-builtin-types/TestObjCBuiltinTypes.py (+3-3)
  • (modified) lldb/test/API/linux/aarch64/mte_core_file/TestAArch64LinuxMTEMemoryTagCoreFile.py (+23-23)
  • (modified) lldb/test/API/linux/aarch64/mte_tag_access/TestAArch64LinuxMTEMemoryTagAccess.py (+84-84)
  • (modified) lldb/test/API/linux/aarch64/mte_tag_faults/TestAArch64LinuxMTEMemoryTagFaults.py (+3-3)
  • (modified) lldb/test/API/linux/aarch64/tagged_memory_region/TestAArch64LinuxTaggedMemoryRegion.py (+2-2)
  • (modified) lldb/test/API/macosx/add-dsym/TestAddDsymDownload.py (+1-1)
  • (modified) lldb/test/API/macosx/lc-note/firmware-corefile/TestFirmwareCorefiles.py (+1-1)
  • (modified) lldb/test/API/macosx/lc-note/kern-ver-str/TestKernVerStrLCNOTE.py (+1-1)
  • (modified) lldb/test/API/macosx/lc-note/multiple-binary-corefile/TestMultipleBinaryCorefile.py (+1-1)
  • (modified) lldb/test/API/macosx/simulator/TestSimulatorPlatform.py (+1-1)
  • (modified) lldb/test/API/macosx/skinny-corefile/TestSkinnyCorefile.py (+1-1)
  • (modified) lldb/test/API/python_api/target-arch-from-module/TestTargetArchFromModule.py (+1-1)
  • (modified) lldb/test/API/source-manager/TestSourceManager.py (+1-1)
  • (modified) lldb/test/API/tools/lldb-server/TestGdbRemoteModuleInfo.py (+3-3)
  • (modified) lldb/test/API/tools/lldb-server/TestPtyServer.py (+1-1)
  • (modified) lldb/test/API/tools/lldb-server/registers-target-xml-reading/TestGdbRemoteTargetXmlPacket.py (+1-1)
  • (modified) lldb/test/API/types/AbstractBase.py (+3-3)
  • (modified) lldb/utils/lui/sourcewin.py (+1-1)
  • (modified) llvm/test/CodeGen/NVPTX/wmma.py (+1-1)
  • (modified) llvm/tools/opt-viewer/opt-viewer.py (+1-1)
  • (modified) llvm/utils/DSAclean.py (+1-1)
  • (modified) llvm/utils/DSAextract.py (+2-2)
  • (modified) llvm/utils/add_argument_names.py (+1-1)
  • (modified) llvm/utils/convert-constraint-log-to-z3.py (+1-1)
  • (modified) llvm/utils/extract_symbols.py (+10-10)
  • (modified) llvm/utils/extract_vplan.py (+1-1)
  • (modified) llvm/utils/git/github-automation.py (+3-3)
  • (modified) llvm/utils/indirect_calls.py (+1-1)
  • (modified) llvm/utils/relative_lines.py (+1-1)
  • (modified) llvm/utils/update_test_prefix.py (+5-5)
  • (modified) mlir/test/Integration/Dialect/SparseTensor/python/test_output.py (+3-3)
  • (modified) mlir/utils/spirv/gen_spirv_dialect.py (+5-5)
diff --git a/.github/workflows/version-check.py b/.github/workflows/version-check.py
index f75fd50300881b..ed41ef4e1b16b0 100755
--- a/.github/workflows/version-check.py
+++ b/.github/workflows/version-check.py
@@ -6,7 +6,7 @@
 
 
 def get_version_from_tag(tag):
-    m = re.match("llvmorg-([0-9]+)\.([0-9]+)\.([0-9]+)(-rc[0-9]+)?$", tag)
+    m = re.match(r"llvmorg-([0-9]+)\.([0-9]+)\.([0-9]+)(-rc[0-9]+)?$", tag)
     if m:
         if m.lastindex == 4:
             # We have an rc tag.
diff --git a/clang-tools-extra/clang-tidy/add_new_check.py b/clang-tools-extra/clang-tidy/add_new_check.py
index a6af76809af02a..3b14d5d158d2d0 100755
--- a/clang-tools-extra/clang-tidy/add_new_check.py
+++ b/clang-tools-extra/clang-tidy/add_new_check.py
@@ -211,7 +211,7 @@ def adapt_module(module_path, module, check_name, check_name_camel):
                         f.write(check_decl)
                     else:
                         match = re.search(
-                            'registerCheck<(.*)> *\( *(?:"([^"]*)")?', line
+                            r'registerCheck<(.*)> *\( *(?:"([^"]*)")?', line
                         )
                         prev_line = None
                         if match:
@@ -383,7 +383,7 @@ def filename_from_module(module_name, check_name):
             if stmt_start_pos == -1:
                 return ""
             stmt = code[stmt_start_pos + 1 : stmt_end_pos]
-            matches = re.search('registerCheck<([^>:]*)>\(\s*"([^"]*)"\s*\)', stmt)
+            matches = re.search(r'registerCheck<([^>:]*)>\(\s*"([^"]*)"\s*\)', stmt)
             if matches and matches[2] == full_check_name:
                 class_name = matches[1]
                 if "::" in class_name:
@@ -401,8 +401,8 @@ def filename_from_module(module_name, check_name):
     # Examine code looking for a c'tor definition to get the base class name.
     def get_base_class(code, check_file):
         check_class_name = os.path.splitext(os.path.basename(check_file))[0]
-        ctor_pattern = check_class_name + "\([^:]*\)\s*:\s*([A-Z][A-Za-z0-9]*Check)\("
-        matches = re.search("\s+" + check_class_name + "::" + ctor_pattern, code)
+        ctor_pattern = check_class_name + r"\([^:]*\)\s*:\s*([A-Z][A-Za-z0-9]*Check)\("
+        matches = re.search(r"\s+" + check_class_name + "::" + ctor_pattern, code)
 
         # The constructor might be inline in the header.
         if not matches:
@@ -476,7 +476,7 @@ def process_doc(doc_file):
                 # Orphan page, don't list it.
                 return "", ""
 
-            match = re.search(".*:http-equiv=refresh: \d+;URL=(.*).html(.*)", content)
+            match = re.search(r".*:http-equiv=refresh: \d+;URL=(.*).html(.*)", content)
             # Is it a redirect?
             return check_name, match
 
@@ -505,7 +505,7 @@ def format_link_alias(doc_file):
                 ref_begin = ""
                 ref_end = "_"
             else:
-                redirect_parts = re.search("^\.\./([^/]*)/([^/]*)$", match.group(1))
+                redirect_parts = re.search(r"^\.\./([^/]*)/([^/]*)$", match.group(1))
                 title = redirect_parts[1] + "-" + redirect_parts[2]
                 target = redirect_parts[1] + "/" + redirect_parts[2]
                 autofix = has_auto_fix(title)
diff --git a/clang-tools-extra/clang-tidy/tool/clang-tidy-diff.py b/clang-tools-extra/clang-tidy/tool/clang-tidy-diff.py
index d96b3450fdbe81..537d78a82cad65 100755
--- a/clang-tools-extra/clang-tidy/tool/clang-tidy-diff.py
+++ b/clang-tools-extra/clang-tidy/tool/clang-tidy-diff.py
@@ -242,7 +242,7 @@ def main():
     filename = None
     lines_by_file = {}
     for line in sys.stdin:
-        match = re.search('^\+\+\+\ "?(.*?/){%s}([^ \t\n"]*)' % args.p, line)
+        match = re.search(r'^\+\+\+\ "?(.*?/){%s}([^ \t\n"]*)' % args.p, line)
         if match:
             filename = match.group(2)
         if filename is None:
@@ -255,7 +255,7 @@ def main():
             if not re.match("^%s$" % args.iregex, filename, re.IGNORECASE):
                 continue
 
-        match = re.search("^@@.*\+(\d+)(,(\d+))?", line)
+        match = re.search(r"^@@.*\+(\d+)(,(\d+))?", line)
         if match:
             start_line = int(match.group(1))
             line_count = 1
diff --git a/clang-tools-extra/docs/clang-tidy/checks/gen-static-analyzer-docs.py b/clang-tools-extra/docs/clang-tidy/checks/gen-static-analyzer-docs.py
index 6545a3906fa50e..c19a0d3de7f11f 100644
--- a/clang-tools-extra/docs/clang-tidy/checks/gen-static-analyzer-docs.py
+++ b/clang-tools-extra/docs/clang-tidy/checks/gen-static-analyzer-docs.py
@@ -59,7 +59,7 @@ def get_checkers(checkers_td, checkers_rst):
             "clang-analyzer-" + checker_package_prefix + "." + checker_name
         )
         anchor_url = re.sub(
-            "\.", "-", checker_package_prefix + "." + checker_name
+            r"\.", "-", checker_package_prefix + "." + checker_name
         ).lower()
 
         if not hidden and "alpha" not in full_package_name.lower():
diff --git a/clang/docs/tools/dump_ast_matchers.py b/clang/docs/tools/dump_ast_matchers.py
index 705ff0d4d40985..b5dab8bc9ed080 100755
--- a/clang/docs/tools/dump_ast_matchers.py
+++ b/clang/docs/tools/dump_ast_matchers.py
@@ -101,7 +101,7 @@ def extract_result_types(comment):
 
 
 def strip_doxygen(comment):
-    """Returns the given comment without \-escaped words."""
+    """Returns the given comment without \\-escaped words."""
     # If there is only a doxygen keyword in the line, delete the whole line.
     comment = re.sub(r"^\\[^\s]+\n", r"", comment, flags=re.M)
 
@@ -236,7 +236,7 @@ def act_on_decl(declaration, comment, allowed_types):
 
         # Parse the various matcher definition macros.
         m = re.match(
-            """.*AST_TYPE(LOC)?_TRAVERSE_MATCHER(?:_DECL)?\(
+            r""".*AST_TYPE(LOC)?_TRAVERSE_MATCHER(?:_DECL)?\(
                        \s*([^\s,]+\s*),
                        \s*(?:[^\s,]+\s*),
                        \s*AST_POLYMORPHIC_SUPPORTED_TYPES\(([^)]*)\)
diff --git a/clang/test/Analysis/check-analyzer-fixit.py b/clang/test/Analysis/check-analyzer-fixit.py
index b616255de89b0c..efed0afc626b95 100644
--- a/clang/test/Analysis/check-analyzer-fixit.py
+++ b/clang/test/Analysis/check-analyzer-fixit.py
@@ -55,7 +55,7 @@ def run_test_once(args, extra_args):
     # themselves.  We need to keep the comments to preserve line numbers while
     # avoiding empty lines which could potentially trigger formatting-related
     # checks.
-    cleaned_test = re.sub("// *CHECK-[A-Z0-9\-]*:[^\r\n]*", "//", input_text)
+    cleaned_test = re.sub(r"// *CHECK-[A-Z0-9\-]*:[^\r\n]*", "//", input_text)
     write_file(temp_file_name, cleaned_test)
 
     original_file_name = temp_file_name + ".orig"
diff --git a/clang/utils/ABITest/TypeGen.py b/clang/utils/ABITest/TypeGen.py
index 6ebec7bdf1d1c4..df4b0ef60fff6a 100644
--- a/clang/utils/ABITest/TypeGen.py
+++ b/clang/utils/ABITest/TypeGen.py
@@ -43,7 +43,7 @@ def isBitField(self):
         return self.bitFieldSize is not None
 
     def isPaddingBitField(self):
-        return self.bitFieldSize is 0
+        return self.bitFieldSize == 0
 
     def getBitFieldSize(self):
         assert self.isBitField()
diff --git a/compiler-rt/lib/asan/scripts/asan_symbolize.py b/compiler-rt/lib/asan/scripts/asan_symbolize.py
index b08769614aeb18..058a1614b55e6a 100755
--- a/compiler-rt/lib/asan/scripts/asan_symbolize.py
+++ b/compiler-rt/lib/asan/scripts/asan_symbolize.py
@@ -316,7 +316,7 @@ def symbolize(self, addr, binary, offset):
         #   * For C functions atos omits parentheses and argument types.
         #   * For C++ functions the function name (i.e., `foo` above) may contain
         #     templates which may contain parentheses.
-        match = re.match("^(.*) \(in (.*)\) \((.*:\d*)\)$", atos_line)
+        match = re.match(r"^(.*) \(in (.*)\) \((.*:\d*)\)$", atos_line)
         logging.debug("atos_line: %s", atos_line)
         if match:
             function_name = match.group(1)
@@ -541,7 +541,7 @@ def process_line_posix(self, line):
         # names in the regex because it could be an
         # Objective-C or C++ demangled name.
         stack_trace_line_format = (
-            "^( *#([0-9]+) *)(0x[0-9a-f]+) *(?:in *.+)? *\((.*)\+(0x[0-9a-f]+)\)"
+            r"^( *#([0-9]+) *)(0x[0-9a-f]+) *(?:in *.+)? *\((.*)\+(0x[0-9a-f]+)\)"
         )
         match = re.match(stack_trace_line_format, line)
         if not match:
diff --git a/cross-project-tests/debuginfo-tests/dexter/dex/command/ParseCommand.py b/cross-project-tests/debuginfo-tests/dexter/dex/command/ParseCommand.py
index 29d7867e808673..fa6647a0fd56dc 100644
--- a/cross-project-tests/debuginfo-tests/dexter/dex/command/ParseCommand.py
+++ b/cross-project-tests/debuginfo-tests/dexter/dex/command/ParseCommand.py
@@ -128,7 +128,7 @@ def get_address_object(address_name: str, offset: int = 0):
 
 
 def _search_line_for_cmd_start(line: str, start: int, valid_commands: dict) -> int:
-    """Scan `line` for a string matching any key in `valid_commands`.
+    r"""Scan `line` for a string matching any key in `valid_commands`.
 
     Start searching from `start`.
     Commands escaped with `\` (E.g. `\DexLabel('a')`) are ignored.
@@ -543,7 +543,7 @@ def test_parse_share_line(self):
     def test_parse_escaped(self):
         """Escaped commands are ignored."""
 
-        lines = ['words \MockCmd("IGNORED") words words words\n']
+        lines = ['words \\MockCmd("IGNORED") words words words\n']
 
         values = self._find_all_mock_values_in_lines(lines)
 
diff --git a/cross-project-tests/lit.cfg.py b/cross-project-tests/lit.cfg.py
index 774c4eaf4d976b..c7d3217c99304f 100644
--- a/cross-project-tests/lit.cfg.py
+++ b/cross-project-tests/lit.cfg.py
@@ -226,7 +226,7 @@ def can_target_host():
     xcode_lldb_vers = subprocess.check_output(["xcrun", "lldb", "--version"]).decode(
         "utf-8"
     )
-    match = re.search("lldb-(\d+)", xcode_lldb_vers)
+    match = re.search(r"lldb-(\d+)", xcode_lldb_vers)
     if match:
         apple_lldb_vers = int(match.group(1))
         if apple_lldb_vers < 1000:
@@ -250,7 +250,7 @@ def get_gdb_version_string():
     if len(gdb_vers_lines) < 1:
         print("Unkown GDB version format (too few lines)", file=sys.stderr)
         return None
-    match = re.search("GNU gdb \(.*?\) ((\d|\.)+)", gdb_vers_lines[0].strip())
+    match = re.search(r"GNU gdb \(.*?\) ((\d|\.)+)", gdb_vers_lines[0].strip())
     if match is None:
         print(f"Unkown GDB version format: {gdb_vers_lines[0]}", file=sys.stderr)
         return None
@@ -264,7 +264,7 @@ def get_clang_default_dwarf_version_string(triple):
     # Get the flags passed by the driver and look for -dwarf-version.
     cmd = f'{llvm_config.use_llvm_tool("clang")} -g -xc  -c - -v -### --target={triple}'
     stderr = subprocess.run(cmd.split(), stderr=subprocess.PIPE).stderr.decode()
-    match = re.search("-dwarf-version=(\d+)", stderr)
+    match = re.search(r"-dwarf-version=(\d+)", stderr)
     if match is None:
         print("Cannot determine default dwarf version", file=sys.stderr)
         return None
diff --git a/libcxx/test/libcxx/transitive_includes.gen.py b/libcxx/test/libcxx/transitive_includes.gen.py
index 28f223c422a9b0..3b61d9d39fef2a 100644
--- a/libcxx/test/libcxx/transitive_includes.gen.py
+++ b/libcxx/test/libcxx/transitive_includes.gen.py
@@ -57,7 +57,7 @@
       continue
 
     # Escape slashes for the awk command below
-    escaped_header = header.replace('/', '\/')
+    escaped_header = header.replace('/', '\\/')
 
     print(f"""\
 //--- {header}.sh.cpp
diff --git a/libcxx/utils/generate_escaped_output_table.py b/libcxx/utils/generate_escaped_output_table.py
index c6bde8f2411cf6..5e85235e2f7db4 100755
--- a/libcxx/utils/generate_escaped_output_table.py
+++ b/libcxx/utils/generate_escaped_output_table.py
@@ -136,7 +136,7 @@ def compactPropertyRanges(input: list[PropertyRange]) -> list[PropertyRange]:
 
 /// Returns whether the code unit needs to be escaped.
 ///
-/// \pre The code point is a valid Unicode code point.
+/// \\pre The code point is a valid Unicode code point.
 [[nodiscard]] _LIBCPP_HIDE_FROM_ABI constexpr bool __needs_escape(const char32_t __code_point) noexcept {{
   // Since __unallocated_region_lower_bound contains the unshifted range do the
   // comparison without shifting.
diff --git a/libcxx/utils/generate_width_estimation_table.py b/libcxx/utils/generate_width_estimation_table.py
index 918dae25fe49e5..2fe51490449ddb 100644
--- a/libcxx/utils/generate_width_estimation_table.py
+++ b/libcxx/utils/generate_width_estimation_table.py
@@ -155,7 +155,7 @@ def compactPropertyRanges(input: list[PropertyRange]) -> list[PropertyRange]:
 
 /// Returns the estimated width of a Unicode code point.
 ///
-/// \pre The code point is a valid Unicode code point.
+/// \\pre The code point is a valid Unicode code point.
 [[nodiscard]] _LIBCPP_HIDE_FROM_ABI constexpr int __estimated_width(const char32_t __code_point) noexcept {{
   // Since __table_upper_bound contains the unshifted range do the
   // comparison without shifting.
diff --git a/lld/test/MachO/tools/validate-unwind-info.py b/lld/test/MachO/tools/validate-unwind-info.py
index ac49f1ecb58899..1cc82f82792731 100755
--- a/lld/test/MachO/tools/validate-unwind-info.py
+++ b/lld/test/MachO/tools/validate-unwind-info.py
@@ -11,7 +11,7 @@
 
 
 def main():
-    hex = "[a-f\d]"
+    hex = r"[a-f\d]"
     hex8 = hex + "{8}"
 
     parser = argparse.ArgumentParser(description=__doc__)
diff --git a/lld/utils/benchmark.py b/lld/utils/benchmark.py
index a07d5ecc69417c..7202e07ec438d2 100755
--- a/lld/utils/benchmark.py
+++ b/lld/utils/benchmark.py
@@ -51,7 +51,7 @@ def __str__(self):
 def getBenchmarks():
     ret = []
     for i in glob.glob("*/response*.txt"):
-        m = re.match("response-(.*)\.txt", os.path.basename(i))
+        m = re.match(r"response-(.*)\.txt", os.path.basename(i))
         variant = m.groups()[0] if m else None
         ret.append(Bench(os.path.dirname(i), variant))
     return ret
diff --git a/lldb/examples/python/crashlog.py b/lldb/examples/python/crashlog.py
index c992348b24be17..6ee09c5c90d8b7 100755
--- a/lldb/examples/python/crashlog.py
+++ b/lldb/examples/python/crashlog.py
@@ -294,7 +294,7 @@ class DarwinImage(symbolication.Image):
             except:
                 dsymForUUIDBinary = ""
 
-        dwarfdump_uuid_regex = re.compile("UUID: ([-0-9a-fA-F]+) \(([^\(]+)\) .*")
+        dwarfdump_uuid_regex = re.compile(r"UUID: ([-0-9a-fA-F]+) \(([^\(]+)\) .*")
 
         def __init__(
             self, text_addr_lo, text_addr_hi, identifier, version, uuid, path, verbose
@@ -488,7 +488,7 @@ def find_image_with_identifier(self, identifier):
         for image in self.images:
             if image.identifier == identifier:
                 return image
-        regex_text = "^.*\.%s$" % (re.escape(identifier))
+        regex_text = r"^.*\.%s$" % (re.escape(identifier))
         regex = re.compile(regex_text)
         for image in self.images:
             if regex.match(image.identifier):
@@ -865,7 +865,7 @@ def get(cls):
             version = r"(?:" + super().version + r"\s+)?"
             address = r"(0x[0-9a-fA-F]{4,})"  # 4 digits or more
 
-            symbol = """
+            symbol = r"""
                         (?:
                             [ ]+
                             (?P<symbol>.+)
@@ -1035,7 +1035,7 @@ def parse_normal(self, line):
             self.crashlog.process_identifier = line[11:].strip()
         elif line.startswith("Version:"):
             version_string = line[8:].strip()
-            matched_pair = re.search("(.+)\((.+)\)", version_string)
+            matched_pair = re.search(r"(.+)\((.+)\)", version_string)
             if matched_pair:
                 self.crashlog.process_version = matched_pair.group(1)
                 self.crashlog.process_compatability_version = matched_pair.group(2)
diff --git a/lldb/examples/python/delta.py b/lldb/examples/python/delta.py
index eeb3c177cfa901..f847b95ab119f1 100755
--- a/lldb/examples/python/delta.py
+++ b/lldb/examples/python/delta.py
@@ -99,7 +99,7 @@ def parse_log_file(file, options):
     print("# Log file: '%s'" % file)
     print("#----------------------------------------------------------------------")
 
-    timestamp_regex = re.compile("(\s*)([1-9][0-9]+\.[0-9]+)([^0-9].*)$")
+    timestamp_regex = re.compile(r"(\s*)([1-9][0-9]+\.[0-9]+)([^0-9].*)$")
 
     base_time = 0.0
     last_time = 0.0
diff --git a/lldb/examples/python/gdbremote.py b/lldb/examples/python/gdbremote.py
index 40ee15853fdb21..d7c3b24cfbff65 100755
--- a/lldb/examples/python/gdbremote.py
+++ b/lldb/examples/python/gdbremote.py
@@ -1537,13 +1537,13 @@ def parse_gdb_log(file, options):
     a long time during a preset set of debugger commands."""
 
     tricky_commands = ["qRegisterInfo"]
-    timestamp_regex = re.compile("(\s*)([1-9][0-9]+\.[0-9]+)([^0-9].*)$")
-    packet_name_regex = re.compile("([A-Za-z_]+)[^a-z]")
+    timestamp_regex = re.compile(r"(\s*)([1-9][0-9]+\.[0-9]+)([^0-9].*)$")
+    packet_name_regex = re.compile(r"([A-Za-z_]+)[^a-z]")
     packet_transmit_name_regex = re.compile(
-        "(?P<direction>send|read) packet: (?P<packet>.*)"
+        r"(?P<direction>send|read) packet: (?P<packet>.*)"
     )
-    packet_contents_name_regex = re.compile("\$([^#]*)#[0-9a-fA-F]{2}")
-    packet_checksum_regex = re.compile(".*#[0-9a-fA-F]{2}$")
+    packet_contents_name_regex = re.compile(r"\$([^#]*)#[0-9a-fA-F]{2}")
+    packet_checksum_regex = re.compile(r".*#[0-9a-fA-F]{2}$")
     packet_names_regex_str = "(" + "|".join(gdb_remote_commands.keys()) + ")(.*)"
     packet_names_regex = re.compile(packet_names_regex_str)
 
diff --git a/lldb/examples/python/jump.py b/lldb/examples/python/jump.py
index e086df5fd15282..8d52bd9af43f6d 100644
--- a/lldb/examples/python/jump.py
+++ b/lldb/examples/python/jump.py
@@ -38,7 +38,7 @@ def parse_linespec(linespec, frame, result):
             )
 
     if not matched:
-        mo = re.match("^\+([0-9]+)$", linespec)
+        mo = re.match(r"^\+([0-9]+)$", linespec)
         if mo is not None:
             matched = True
             # print "Matched +<count>"
@@ -54,7 +54,7 @@ def parse_linespec(linespec, frame, result):
             )
 
     if not matched:
-        mo = re.match("^\-([0-9]+)$", linespec)
+        mo = re.match(r"^\-([0-9]+)$", linespec)
         if mo is not None:
             matched = True
             # print "Matched -<count>"
@@ -79,7 +79,7 @@ def parse_linespec(linespec, frame, result):
             breakpoint = target.BreakpointCreateByLocation(file_name, line_number)
 
     if not matched:
-        mo = re.match("\*((0x)?([0-9a-f]+))$", linespec)
+        mo = re.match(r"\*((0x)?([0-9a-f]+))$", linespec)
         if mo is not None:
             matched = True
             # print "Matched <address-expression>"
diff --git a/lldb/examples/python/performance.py b/lldb/examples/python/performance.py
index 869a0b061cf852..b86b5a52522e09 100755
--- a/lldb/examples/python/performance.py
+++ b/lldb/examples/python/performance.py
@@ -346,7 +346,7 @@ def __init__(self, pid):
 
     def Measure(self):
         output = subprocess.getoutput(self.command).split("\n")[-1]
-        values = re.split("[-+\s]+", output)
+        values = re.split(r"[-+\s]+", output)
         for idx, stat in enumerate(values):
             multiplier = 1
             if stat:
diff --git a/lldb/examples/python/symbolication.py b/lldb/examples/python/symbolication.py
index f6dcc8b9a79437..d47ae8bed64723 100755
--- a/lldb/examples/python/symbolication.py
+++ b/lldb/examples/python/symbolication.py
@@ -176,10 +176,10 @@ def symbolicate(self, verbose=False):
 class Section:
     """Class that represents an load address range"""
 
-    sect_info_regex = re.compile("(?P<name>[^=]+)=(?P<range>.*)")
-    addr_regex = re.compile("^\s*(?P<start>0x[0-9A-Fa-f]+)\s*$")
+    sect_info_regex = re.compile(r"(?P<name>[^=]+)=(?P<range>.*)")
+    addr_regex = re.compile(r"^\s*(?P<start>0x[0-9A-Fa-f]+)\s*$")
     range_regex = re.compile(
-        "^\s*(?P<start>0x[0-9A-Fa-f]+)\s*(?P<op>[-+])\s*(?P<end>0x[0-9A-Fa-f]+)\s*$"
+        r"^\s*(?P<start>0x[0-9A-Fa-f]+)\s*(?P<op>[-+])\s*(?P<end>0x[0-9A-Fa-f]+)\s*$"
     )
 
     def __init__(self, start_addr=None, end_addr=None, name=None):
@@ -557,7 +557,7 @@ def find_images_with_identifier(self, identifier):
             if image....
[truncated]

Copy link
Member

@ldionne ldionne left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Libc++ parts LGTM.

Copy link

⚠️ Python code formatter, darker found issues in your code. ⚠️

You can test this locally with the following command:
darker --check --diff -r e82765bf07a978674c0e75c8b2e20f154ae24a4c...c7d6289573379be760ca9d691d62e0f87ba0ee8a .github/workflows/version-check.py clang-tools-extra/clang-tidy/add_new_check.py clang-tools-extra/clang-tidy/tool/clang-tidy-diff.py clang-tools-extra/docs/clang-tidy/checks/gen-static-analyzer-docs.py clang/docs/tools/dump_ast_matchers.py clang/test/Analysis/check-analyzer-fixit.py clang/utils/ABITest/TypeGen.py compiler-rt/lib/asan/scripts/asan_symbolize.py cross-project-tests/debuginfo-tests/dexter/dex/command/ParseCommand.py cross-project-tests/lit.cfg.py libcxx/test/libcxx/transitive_includes.gen.py libcxx/utils/generate_escaped_output_table.py libcxx/utils/generate_width_estimation_table.py lld/test/MachO/tools/validate-unwind-info.py lld/utils/benchmark.py lldb/examples/python/crashlog.py lldb/examples/python/delta.py lldb/examples/python/gdbremote.py lldb/examples/python/jump.py lldb/examples/python/performance.py lldb/examples/python/symbolication.py lldb/packages/Python/lldbsuite/test/decorators.py lldb/packages/Python/lldbsuite/test/lldbpexpect.py lldb/packages/Python/lldbsuite/test/lldbtest.py lldb/packages/Python/lldbsuite/test/test_runner/process_control.py lldb/packages/Python/lldbsuite/test/tools/lldb-server/gdbremote_testcase.py lldb/packages/Python/lldbsuite/test/tools/lldb-server/lldbgdbserverutils.py lldb/test/API/commands/command/backticks/TestBackticksInAlias.py lldb/test/API/commands/expression/memory-allocation/TestMemoryAllocSettings.py lldb/test/API/commands/expression/test/TestExprs.py lldb/test/API/commands/gui/expand-threads-tree/TestGuiExpandThreadsTree.py lldb/test/API/commands/help/TestHelp.py lldb/test/API/commands/process/launch-with-shellexpand/TestLaunchWithShellExpand.py lldb/test/API/commands/register/register/TestRegistersUnavailable.py lldb/test/API/commands/settings/TestSettings.py lldb/test/API/commands/target/basic/TestTargetCommand.py lldb/test/API/commands/target/dump-separate-debug-info/dwo/TestDumpDwo.py lldb/test/API/commands/target/dump-separate-debug-info/oso/TestDumpOso.py lldb/test/API/commands/trace/TestTraceDumpInfo.py lldb/test/API/commands/trace/TestTraceEvents.py lldb/test/API/commands/trace/TestTraceStartStop.py lldb/test/API/commands/trace/TestTraceTSC.py lldb/test/API/driver/quit_speed/TestQuitWithProcess.py lldb/test/API/functionalities/breakpoint/breakpoint_by_line_and_column/TestBreakpointByLineAndColumn.py lldb/test/API/functionalities/breakpoint/breakpoint_locations/TestBreakpointLocations.py lldb/test/API/functionalities/data-formatter/data-formatter-advanced/TestDataFormatterAdv.py lldb/test/API/functionalities/data-formatter/data-formatter-cpp/TestDataFormatterCpp.py lldb/test/API/functionalities/data-formatter/data-formatter-objc/TestDataFormatterObjCNSContainer.py lldb/test/API/functionalities/data-formatter/data-formatter-skip-summary/TestDataFormatterSkipSummary.py lldb/test/API/functionalities/data-formatter/data-formatter-stl/generic/unordered/TestDataFormatterGenericUnordered.py lldb/test/API/functionalities/data-formatter/data-formatter-stl/libcxx/atomic/TestLibCxxAtomic.py lldb/test/API/functionalities/data-formatter/data-formatter-stl/libcxx/initializerlist/TestInitializerList.py lldb/test/API/functionalities/data-formatter/type_summary_list_arg/TestTypeSummaryListArg.py lldb/test/API/functionalities/memory-region/TestMemoryRegion.py lldb/test/API/functionalities/target_var/TestTargetVar.py lldb/test/API/iohandler/completion/TestIOHandlerCompletion.py lldb/test/API/lang/c/function_types/TestFunctionTypes.py lldb/test/API/lang/c/register_variables/TestRegisterVariables.py lldb/test/API/lang/c/set_values/TestSetValues.py lldb/test/API/lang/c/strings/TestCStrings.py lldb/test/API/lang/c/tls_globals/TestTlsGlobals.py lldb/test/API/lang/cpp/char1632_t/TestChar1632T.py lldb/test/API/lang/cpp/class_static/TestStaticVariables.py lldb/test/API/lang/cpp/class_types/TestClassTypes.py lldb/test/API/lang/cpp/dynamic-value/TestDynamicValue.py lldb/test/API/lang/cpp/namespace/TestNamespace.py lldb/test/API/lang/cpp/signed_types/TestSignedTypes.py lldb/test/API/lang/cpp/unsigned_types/TestUnsignedTypes.py lldb/test/API/lang/mixed/TestMixedLanguages.py lldb/test/API/lang/objc/foundation/TestObjCMethods.py lldb/test/API/lang/objc/foundation/TestObjCMethodsNSArray.py lldb/test/API/lang/objc/foundation/TestObjCMethodsNSError.py lldb/test/API/lang/objc/foundation/TestObjCMethodsString.py lldb/test/API/lang/objc/objc-dynamic-value/TestObjCDynamicValue.py lldb/test/API/lang/objcxx/objc-builtin-types/TestObjCBuiltinTypes.py lldb/test/API/linux/aarch64/mte_core_file/TestAArch64LinuxMTEMemoryTagCoreFile.py lldb/test/API/linux/aarch64/mte_tag_access/TestAArch64LinuxMTEMemoryTagAccess.py lldb/test/API/linux/aarch64/mte_tag_faults/TestAArch64LinuxMTEMemoryTagFaults.py lldb/test/API/linux/aarch64/tagged_memory_region/TestAArch64LinuxTaggedMemoryRegion.py lldb/test/API/macosx/add-dsym/TestAddDsymDownload.py lldb/test/API/macosx/lc-note/firmware-corefile/TestFirmwareCorefiles.py lldb/test/API/macosx/lc-note/kern-ver-str/TestKernVerStrLCNOTE.py lldb/test/API/macosx/lc-note/multiple-binary-corefile/TestMultipleBinaryCorefile.py lldb/test/API/macosx/simulator/TestSimulatorPlatform.py lldb/test/API/macosx/skinny-corefile/TestSkinnyCorefile.py lldb/test/API/python_api/target-arch-from-module/TestTargetArchFromModule.py lldb/test/API/source-manager/TestSourceManager.py lldb/test/API/tools/lldb-server/TestGdbRemoteModuleInfo.py lldb/test/API/tools/lldb-server/TestPtyServer.py lldb/test/API/tools/lldb-server/registers-target-xml-reading/TestGdbRemoteTargetXmlPacket.py lldb/test/API/types/AbstractBase.py lldb/utils/lui/sourcewin.py llvm/test/CodeGen/NVPTX/wmma.py llvm/tools/opt-viewer/opt-viewer.py llvm/utils/DSAclean.py llvm/utils/DSAextract.py llvm/utils/add_argument_names.py llvm/utils/convert-constraint-log-to-z3.py llvm/utils/extract_symbols.py llvm/utils/extract_vplan.py llvm/utils/git/github-automation.py llvm/utils/indirect_calls.py llvm/utils/relative_lines.py llvm/utils/update_test_prefix.py mlir/test/Integration/Dialect/SparseTensor/python/test_output.py mlir/utils/spirv/gen_spirv_dialect.py
View the diff from darker here.
--- libcxx/test/libcxx/transitive_includes.gen.py	2024-03-27 14:26:55.000000 +0000
+++ libcxx/test/libcxx/transitive_includes.gen.py	2024-03-27 14:55:21.669458 +0000
@@ -29,39 +29,46 @@
 # for std in c++03 c++11 c++14 c++17 c++20 c++23 c++26; do <build>/bin/llvm-lit --param std=$std libcxx/test/libcxx/transitive_includes.gen.py; done
 regenerate_expected_results = False
 
 BLOCKLIT = '' # block Lit from interpreting a RUN/XFAIL/etc inside the generation script
 if regenerate_expected_results:
-  print(f"""\
+    print(
+        f"""\
 //--- generate-transitive-includes.sh.cpp
 // RUN{BLOCKLIT}: mkdir %t
-""")
+"""
+    )
 
-  all_traces = []
-  for header in sorted(public_headers):
-    if header.endswith('.h'): # Skip C compatibility or detail headers
-      continue
+    all_traces = []
+    for header in sorted(public_headers):
+        if header.endswith(".h"):  # Skip C compatibility or detail headers
+            continue
 
-    normalized_header = re.sub('/', '_', header)
-    print(f"""\
+        normalized_header = re.sub("/", "_", header)
+        print(
+            f"""\
 // RUN{BLOCKLIT}: echo "#include <{header}>" | %{{cxx}} -xc++ - %{{flags}} %{{compile_flags}} --trace-includes -fshow-skipped-includes --preprocess > /dev/null 2> %t/trace-includes.{normalized_header}.txt
-""")
-    all_traces.append(f'%t/trace-includes.{normalized_header}.txt')
+"""
+        )
+        all_traces.append(f"%t/trace-includes.{normalized_header}.txt")
 
-  print(f"""\
+    print(
+        f"""\
 // RUN{BLOCKLIT}: %{{python}} %{{libcxx-dir}}/test/libcxx/transitive_includes_to_csv.py {' '.join(all_traces)} > %{{libcxx-dir}}/test/libcxx/transitive_includes/%{{cxx_std}}.csv
-""")
+"""
+    )
 
 else:
-  for header in public_headers:
-    if header.endswith('.h'): # Skip C compatibility or detail headers
-      continue
+    for header in public_headers:
+        if header.endswith(".h"):  # Skip C compatibility or detail headers
+            continue
 
-    # Escape slashes for the awk command below
-    escaped_header = header.replace('/', '\\/')
+        # Escape slashes for the awk command below
+        escaped_header = header.replace("/", "\\/")
 
-    print(f"""\
+        print(
+            f"""\
 //--- {header}.sh.cpp
 {lit_header_restrictions.get(header, '')}
 
 // TODO: Fix this test to make it work with localization or wide characters disabled
 // UNSUPPORTED{BLOCKLIT}: no-localization, no-wide-characters, no-threads, no-filesystem, libcpp-has-no-incomplete-tzdb, no-tzdb
@@ -85,6 +92,7 @@
 // RUN{BLOCKLIT}: %{{cxx}} %s %{{flags}} %{{compile_flags}} --trace-includes -fshow-skipped-includes --preprocess > /dev/null 2> %t/trace-includes.txt
 // RUN{BLOCKLIT}: %{{python}} %{{libcxx-dir}}/test/libcxx/transitive_includes_to_csv.py %t/trace-includes.txt > %t/actual_transitive_includes.csv
 // RUN{BLOCKLIT}: cat %{{libcxx-dir}}/test/libcxx/transitive_includes/%{{cxx_std}}.csv | awk '/^{escaped_header} / {{ print }}' > %t/expected_transitive_includes.csv
 // RUN{BLOCKLIT}: diff -w %t/expected_transitive_includes.csv %t/actual_transitive_includes.csv
 #include <{header}>
-""")
+"""
+        )
--- lldb/test/API/commands/trace/TestTraceEvents.py	2024-03-27 14:26:55.000000 +0000
+++ lldb/test/API/commands/trace/TestTraceEvents.py	2024-03-27 14:55:24.483261 +0000
@@ -66,11 +66,11 @@
         self.expect("si")
         # We ensure that the paused events are printed correctly forward
         self.expect(
             "thread trace dump instructions -e -f",
             patterns=[
-                fr"""thread #1: tid = .*
+                rf"""thread #1: tid = .*
     0: \(event\) trace synchronization point \[offset \= 0x0xec0\]
     1: \(event\) hardware disabled tracing
   a.out`main \+ 23 at main.cpp:12
     2: {ADDRESS_REGEX}    movl .*
     3: \(event\) software disabled tracing
@@ -100,11 +100,11 @@
 
         # We ensure that the paused events are printed correctly backward
         self.expect(
             "thread trace dump instructions -e --id 18",
             patterns=[
-                fr"""thread #1: tid = .*
+                rf"""thread #1: tid = .*
   a.out`symbol stub for: foo\(\)
     18: {ADDRESS_REGEX}    jmpq .*
     17: \(event\) software disabled tracing
   a.out`main \+ 63 at main.cpp:16
     16: {ADDRESS_REGEX}    callq  .* ; symbol stub for: foo\(\)
--- lldb/test/API/commands/trace/TestTraceStartStop.py	2024-03-27 14:26:55.000000 +0000
+++ lldb/test/API/commands/trace/TestTraceStartStop.py	2024-03-27 14:55:24.564767 +0000
@@ -242,22 +242,22 @@
         # We can reconstruct the single instruction executed in the first line
         self.expect("n")
         self.expect(
             "thread trace dump instructions -f",
             patterns=[
-                fr"""thread #1: tid = .*
+                rf"""thread #1: tid = .*
   a.out`main \+ 4 at main.cpp:2
     2: {ADDRESS_REGEX}    movl"""
             ],
         )
 
         # We can reconstruct the instructions up to the second line
         self.expect("n")
         self.expect(
             "thread trace dump instructions -f",
             patterns=[
-                fr"""thread #1: tid = .*
+                rf"""thread #1: tid = .*
   a.out`main \+ 4 at main.cpp:2
     2: {ADDRESS_REGEX}    movl .*
   a.out`main \+ 11 at main.cpp:4
     4: {ADDRESS_REGEX}    movl .*
     6: {ADDRESS_REGEX}    jmp  .* ; <\+28> at main.cpp:4
@@ -267,11 +267,11 @@
         )
 
         self.expect(
             "thread trace dump instructions",
             patterns=[
-                fr"""thread #1: tid = .*
+                rf"""thread #1: tid = .*
   a.out`main \+ 32 at main.cpp:4
     10: {ADDRESS_REGEX}    jle  .* ; <\+20> at main.cpp:5
     8: {ADDRESS_REGEX}    cmpl .*
     6: {ADDRESS_REGEX}    jmp  .* ; <\+28> at main.cpp:4
     4: {ADDRESS_REGEX}    movl .*
@@ -295,20 +295,20 @@
         self.expect("thread trace start")
         self.expect("n")
         self.expect(
             "thread trace dump instructions -f",
             patterns=[
-                fr"""thread #1: tid = .*
+                rf"""thread #1: tid = .*
   a.out`main \+ 20 at main.cpp:5
     2: {ADDRESS_REGEX}    xorl"""
             ],
         )
 
         self.expect(
             "thread trace dump instructions",
             patterns=[
-                fr"""thread #1: tid = .*
+                rf"""thread #1: tid = .*
   a.out`main \+ 20 at main.cpp:5
     2: {ADDRESS_REGEX}    xorl"""
             ],
         )
 
--- lldb/test/API/functionalities/data-formatter/data-formatter-advanced/TestDataFormatterAdv.py	2024-03-27 14:26:55.000000 +0000
+++ lldb/test/API/functionalities/data-formatter/data-formatter-advanced/TestDataFormatterAdv.py	2024-03-27 14:55:24.828725 +0000
@@ -102,11 +102,13 @@
             'frame variable int_array --summary-string "${*var[0-1]}"', substrs=["3"]
         )
 
         self.runCmd("type summary clear")
 
-        self.runCmd('type summary add --summary-string "${var[0-1]}" -x "int\\[[0-9]\\]"')
+        self.runCmd(
+            'type summary add --summary-string "${var[0-1]}" -x "int\\[[0-9]\\]"'
+        )
 
         self.expect("frame variable int_array", substrs=["1,2"])
 
         self.runCmd('type summary add --summary-string "${var[0-1]}" "int[]"')
 
--- lldb/test/API/linux/aarch64/mte_tag_access/TestAArch64LinuxMTEMemoryTagAccess.py	2024-03-27 14:26:55.000000 +0000
+++ lldb/test/API/linux/aarch64/mte_tag_access/TestAArch64LinuxMTEMemoryTagAccess.py	2024-03-27 14:55:25.948860 +0000
@@ -522,11 +522,13 @@
         )
 
         # End of range is untagged
         self.expect(
             'memory read mte_buf+page_size-16 mte_buf+page_size+16 -f "x" -l 1 -s 16 --show-tags',
-            patterns=[r"0x[0-9A-Fa-f]+f0: 0x0+ \(tag: 0xf\)\n" "0x[0-9A-Fa-f]+00: 0x0+"],
+            patterns=[
+                r"0x[0-9A-Fa-f]+f0: 0x0+ \(tag: 0xf\)\n" "0x[0-9A-Fa-f]+00: 0x0+"
+            ],
         )
 
         # The smallest MTE range we can get is a single page so we just check
         # parts of this result. Where we read from before the tagged page to after it.
         # Add --force here because we're reading just over 4k.
--- lldb/test/API/linux/aarch64/tagged_memory_region/TestAArch64LinuxTaggedMemoryRegion.py	2024-03-27 14:26:55.000000 +0000
+++ lldb/test/API/linux/aarch64/tagged_memory_region/TestAArch64LinuxTaggedMemoryRegion.py	2024-03-27 14:55:26.006061 +0000
@@ -37,11 +37,12 @@
             substrs=["stopped", "stop reason = breakpoint"],
         )
 
         # Despite the non address bits we should find a region
         self.expect(
-            "memory region the_page", patterns=[r"\[0x[0-9A-Fa-f]+-0x[0-9A-Fa-f]+\) r-x"]
+            "memory region the_page",
+            patterns=[r"\[0x[0-9A-Fa-f]+-0x[0-9A-Fa-f]+\) r-x"],
         )
 
         # Check that the usual error message is displayed after repeating
         # the command until the last region.
         self.runCmd("memory region 0")
@@ -66,7 +67,8 @@
             self.runCmd("memory region")
 
         # This should not error, since the user supplied address overrides
         # the previous end address.
         self.expect(
-            "memory region the_page", patterns=[r"\[0x[0-9A-Fa-f]+-0x[0-9A-Fa-f]+\) r-x"]
+            "memory region the_page",
+            patterns=[r"\[0x[0-9A-Fa-f]+-0x[0-9A-Fa-f]+\) r-x"],
         )

Signed-off-by: Sv. Lockal <lockalsash@gmail.com>
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM, verified the two strings are the same

>>> r"^(.*) \(in (.*)\) \((.*:\d*)\)$" == "^(.*) \(in (.*)\) \((.*:\d*)\)$"
True
>>> "^( *#([0-9]+) *)(0x[0-9a-f]+) *(?:in *.+)? *\((.*)\+(0x[0-9a-f]+)\)" == r"^( *#([0-9]+) *)(0x[0-9a-f]+) *(?:in *.+)? *\((.*)\+(0x[0-9a-f]+)\)"

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

But automatic replacement is not possible, because "\n" != r"\n". But I checked carefully that all changed places with \n and \t are regexps, and in regexps it is semantically the same.

>>> '\n' in 'test \n test'
True
>>> r'\n' in 'test \n test'
False
>>> import re
>>> re.search('\n', 'test \n test')
<re.Match object; span=(5, 6), match='\n'>
>>> re.search(r'\n', 'test \n test')
<re.Match object; span=(5, 6), match='\n'>

Copy link
Contributor

@kastiglione kastiglione left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

lldb/package looks good, thanks.

lldb/examples I trust

lldb/test I or someone else will look at soon.

@@ -1517,7 +1517,7 @@ def buildLibrary(self, sources, lib_name):
"DYLIB_NAME": lib_name,
"CFLAGS_EXTRAS": "%s -I%s "
% (stdflag, os.path.join(os.environ["LLDB_SRC"], "include")),
"LD_EXTRAS": "-shared -l%s\liblldb.lib" % lib_dir,
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

hopefully someone changes this to os.path.join in the future.

@@ -101,7 +101,7 @@ def extract_result_types(comment):


def strip_doxygen(comment):
"""Returns the given comment without \-escaped words."""
"""Returns the given comment without \\-escaped words."""
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I see lots of changes to comment blocks in this patch. Can we use ''' instead to fix those warnings?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

No, '''\-''' is still SyntaxWarning in Python 3.12. It is possible to not escape with raw literals, but raw literals are used mostly to indicate that string is actually raw (I've never seen raw docblocks). Also there is some consensus between highlighting tools that raw literals use regexp highlighting (in vscode, dandavison/delta, sharkdp/bat), that's why I escaped some strings selectively (e. g. in runCmd I did not use raw literals).
image

@ldionne
Copy link
Member

ldionne commented May 29, 2024

Can we either finish this up or close it, please? I'd like to tidy up the libc++ review queue.

@AngryLoki
Copy link
Contributor Author

This is going nowhere, I'll close it and create a separate PR for libcxx.
Also transitive_includes.gen.py somehow (due to automatic git conflict resolution?) got damaged indentations, so it would require new review anyways.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
clang Clang issues not falling into any other category clang-tidy clang-tools-extra compiler-rt:asan Address sanitizer compiler-rt:sanitizer compiler-rt github:workflow libc++ libc++ C++ Standard Library. Not GNU libstdc++. Not libc++abi. lld:MachO lld lldb mlir:sparse Sparse compiler in MLIR mlir
Projects
None yet
Development

Successfully merging this pull request may close these issues.

None yet

6 participants