brintos

brintos / llvm-project-archived public Read only

0
0
Text · 5.1 KiB · 83c0572 Raw
111 lines · python
1import lldb2import lldbsuite.test.lldbplatformutil as lldbplatformutil3from lldbsuite.test.decorators import *4from lldbsuite.test.lldbtest import *5from lldbsuite.test import lldbutil6 7 8class TestCase(TestBase):9    @no_debug_info_test10    @skipIf(compiler="clang", compiler_version=["<", "20.0"])11    def test(self):12        self.build()13        target = self.dbg.CreateTarget(self.getBuildArtifact("a.out"))14 15        value = self.expect_expr("temp1", result_type="C<int, 2>")16        template_type = value.GetType()17        self.assertEqual(template_type.GetNumberOfTemplateArguments(), 2)18 19        # Check a type argument.20        self.assertEqual(21            template_type.GetTemplateArgumentKind(0), lldb.eTemplateArgumentKindType22        )23        self.assertEqual(template_type.GetTemplateArgumentType(0).GetName(), "int")24 25        # Check a integral argument.26        self.assertEqual(27            template_type.GetTemplateArgumentKind(1), lldb.eTemplateArgumentKindIntegral28        )29        self.assertEqual(30            template_type.GetTemplateArgumentType(1).GetName(), "unsigned int"31        )32 33        # Template parameter isn't a NTTP.34        self.assertFalse(template_type.GetTemplateArgumentValue(target, 0))35 36        # Template parameter index out-of-bounds.37        self.assertFalse(template_type.GetTemplateArgumentValue(target, 2))38 39        # Template parameter is a NTTP.40        param_val = template_type.GetTemplateArgumentValue(target, 1)41        self.assertEqual(param_val.GetTypeName(), "unsigned int")42        self.assertEqual(param_val.GetValueAsUnsigned(), 2)43 44        # Try to get an invalid template argument.45        self.assertEqual(46            template_type.GetTemplateArgumentKind(2), lldb.eTemplateArgumentKindNull47        )48        self.assertEqual(template_type.GetTemplateArgumentType(2).GetName(), "")49 50        value = self.expect_expr("temp2", result_type="Foo<short, -2>")51 52        # Can't get template parameter value with invalid target.53        self.assertFalse(value.GetType().GetTemplateArgumentValue(lldb.SBTarget(), 1))54 55        template_param_value = value.GetType().GetTemplateArgumentValue(target, 1)56        self.assertTrue(template_param_value)57        self.assertEqual(template_param_value.GetTypeName(), "short")58        self.assertEqual(template_param_value.GetValueAsSigned(), -2)59 60        value = self.expect_expr("temp3", result_type="Foo<char, 'v'>")61        template_param_value = value.GetType().GetTemplateArgumentValue(target, 1)62        self.assertTrue(template_param_value)63        self.assertEqual(template_param_value.GetTypeName(), "char")64        self.assertEqual(chr(template_param_value.GetValueAsSigned()), "v")65 66        value = self.expect_expr("temp4", result_type="Foo<float, 2.000000e+00>")67        template_param_value = value.GetType().GetTemplateArgumentValue(target, 1)68        self.assertEqual(template_param_value.GetTypeName(), "float")69        # FIXME: this should return a float70        self.assertEqual(template_param_value.GetValueAsSigned(), 2)71 72        value = self.expect_expr("temp5", result_type="Foo<double, -2.505000e+02>")73        template_param_value = value.GetType().GetTemplateArgumentValue(target, 1)74        self.assertEqual(template_param_value.GetTypeName(), "double")75        # FIXME: this should return a float76        self.assertEqual(template_param_value.GetValueAsSigned(), -250)77 78        # FIXME: type should be Foo<int *, &temp1.member>79        value = self.expect_expr("temp6", result_type="Foo<int *, int *>")80        self.assertFalse(value.GetType().GetTemplateArgumentValue(target, 1))81 82        # FIXME: support wider range of floating point types83        value = self.expect_expr("temp7", result_type="Foo<__fp16, __fp16>")84        self.assertFalse(value.GetType().GetTemplateArgumentValue(target, 1))85 86        # The target we use when evaluating these expressions for Arm leads to there87        # not being a __bf16 type in the AST so we fall back to __fp16 and evaluating88        # this fails.89        if lldbplatformutil.getArchitecture() != "arm":90            value = self.expect_expr("temp8", result_type="Foo<__bf16, __bf16>")91            self.assertFalse(value.GetType().GetTemplateArgumentValue(target, 1))92 93        value = self.expect_expr("temp9", result_type="Bar<double, 1.200000e+00>")94        template_param_value = value.GetType().GetTemplateArgumentValue(target, 1)95        self.assertEqual(template_param_value.GetTypeName(), "double")96        # FIXME: this should return a float97        self.assertEqual(template_param_value.GetValueAsSigned(), 1)98 99        value = self.expect_expr(100            "temp10", result_type="Bar<float, 1.000000e+00, 2.000000e+00>"101        )102        template_param_value = value.GetType().GetTemplateArgumentValue(target, 1)103        self.assertEqual(template_param_value.GetTypeName(), "float")104        # FIXME: this should return a float105        self.assertEqual(template_param_value.GetValueAsSigned(), 1)106 107        template_param_value = value.GetType().GetTemplateArgumentValue(target, 2)108        self.assertEqual(template_param_value.GetTypeName(), "float")109        # FIXME: this should return a float110        self.assertEqual(template_param_value.GetValueAsSigned(), 2)111