[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/
This commit is contained in:
Adrian Vogelsgesang
2024-10-31 17:01:46 +01:00
committed by GitHub
parent c7ef002bc6
commit 2aed0d9cd3

View File

@@ -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()