From 2aed0d9cd3fc8f3c600d59b8b10d10a4466e50c6 Mon Sep 17 00:00:00 2001 From: Adrian Vogelsgesang Date: Thu, 31 Oct 2024 17:01:46 +0100 Subject: [PATCH] [lldb][test] Fix `LibCxxInternalsRecognizerTestCase` on clang <= 17 (#114122) We had to disable the tests for libc++ <= 15 because the `std::ranges` functions were not available, yet. Also, on libc++17 there was still an additional `__fn` struct withing `ranges::__sort`. The test expectation was updated to use a regular expression, so we can match both the old and the new name. See https://green.lab.llvm.org/job/llvm.org/view/LLDB/job/lldb-cmake-matrix/912/execution/node/107/log/ --- .../TestLibcxxInternalsRecognizer.py | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/lldb/test/API/lang/cpp/libcxx-internals-recognizer/TestLibcxxInternalsRecognizer.py b/lldb/test/API/lang/cpp/libcxx-internals-recognizer/TestLibcxxInternalsRecognizer.py index ad48208f21e5..5cc43f3cd991 100644 --- a/lldb/test/API/lang/cpp/libcxx-internals-recognizer/TestLibcxxInternalsRecognizer.py +++ b/lldb/test/API/lang/cpp/libcxx-internals-recognizer/TestLibcxxInternalsRecognizer.py @@ -3,11 +3,13 @@ from lldbsuite.test.decorators import * from lldbsuite.test.lldbtest import * from lldbsuite.test import lldbutil +import re class LibCxxInternalsRecognizerTestCase(TestBase): NO_DEBUG_INFO_TESTCASE = True @add_test_categories(["libc++"]) + @skipIf(compiler="clang", compiler_version=["<", "16.0"]) def test_frame_recognizer(self): """Test that implementation details of libc++ are hidden""" self.build() @@ -21,7 +23,7 @@ class LibCxxInternalsRecognizerTestCase(TestBase): # We never hide the frame of the entry-point into the standard library, even # if the name starts with `__` which usually indicates an internal function. "ranges_sort_less(int, int)": [ - "ranges::__sort::operator()", + re.compile("ranges::__sort::(__fn::)?operator\(\)"), "test_algorithms", ], # `ranges::views::transform` internally uses `std::invoke`, and that @@ -57,9 +59,14 @@ class LibCxxInternalsRecognizerTestCase(TestBase): ): frame_id = frame_id + 1 # Expect the correct parent frame - self.assertIn( - expected_parent, thread.GetFrameAtIndex(frame_id).GetFunctionName() - ) + func_name = thread.GetFrameAtIndex(frame_id).GetFunctionName() + if isinstance(expected_parent, re.Pattern): + self.assertTrue( + expected_parent.search(func_name) is not None, + f"'{expected_parent}' not found in '{func_name}'" + ) + else: + self.assertIn(expected_parent, func_name) frame_id = frame_id + 1 process.Continue()