Anonymous namespaces are supposed to be optional when looking up types. This was not working in combination with -gsimple-template-names, because the way it was constructing the complete (with template args) name scope (i.e., by generating thescope as a string and then reparsing it) did not preserve the information about the scope kinds. Essentially what the code wants here is to call `GetTypeLookupContext` (that's the function used to get the context in the "regular" code path), but to embelish each name with the template arguments (if they don't have them already). This PR implements exactly that by adding an argument to control which kind of names are we interested in. This should also make the lookup faster as it avoids parsing of the long string, but I haven't attempted to benchmark that. I believe this function can also be used in some other places where we're manually appending template names, but I'm leaving that for another patch.
40 lines
1.3 KiB
Python
40 lines
1.3 KiB
Python
"""
|
|
Test that a nested template parameter works with simple template names.
|
|
"""
|
|
|
|
import lldb
|
|
import lldbsuite.test.lldbutil as lldbutil
|
|
from lldbsuite.test.decorators import *
|
|
from lldbsuite.test.lldbtest import *
|
|
|
|
|
|
class NestedTemplateTestCase(TestBase):
|
|
def do_test(self, debug_flags):
|
|
self.build(dictionary=debug_flags)
|
|
self.dbg.CreateTarget(self.getBuildArtifact("a.out"))
|
|
self.expect(
|
|
"image lookup -A -t 'Inner<int>'",
|
|
DATA_TYPES_DISPLAYED_CORRECTLY,
|
|
substrs=["1 match found"],
|
|
)
|
|
self.expect(
|
|
"image lookup -A -t 'NS::Struct<int>'",
|
|
DATA_TYPES_DISPLAYED_CORRECTLY,
|
|
substrs=["1 match found"],
|
|
)
|
|
self.expect(
|
|
"image lookup -A -t 'NS::Union<int>'",
|
|
DATA_TYPES_DISPLAYED_CORRECTLY,
|
|
substrs=["1 match found"],
|
|
)
|
|
|
|
@skipIf(compiler=no_match("clang"))
|
|
@skipIf(compiler_version=["<", "15.0"])
|
|
def test_simple_template_names(self):
|
|
self.do_test(dict(TEST_CFLAGS_EXTRAS="-gsimple-template-names"))
|
|
|
|
@skipIf(compiler=no_match("clang"))
|
|
@skipIf(compiler_version=["<", "15.0"])
|
|
def test_no_simple_template_names(self):
|
|
self.do_test(dict(TEST_CFLAGS_EXTRAS="-gno-simple-template-names"))
|