summaryrefslogtreecommitdiff
path: root/lldb/test/API/lang
diff options
context:
space:
mode:
authorDavid Spickett <david.spickett@linaro.org>2025-10-01 15:53:10 +0100
committerGitHub <noreply@github.com>2025-10-01 15:53:10 +0100
commitedb80a8d7fb2e1e29a4cb792148b4ffd441eb114 (patch)
treeb9eebc38ba50a2d023c7acba721e9afc1aa9a884 /lldb/test/API/lang
parent9e0c0a09392ff7d3b196b17c77595e921e35d765 (diff)
[lldb][test] Fix bf16 test cases on Arm 32-bit (#161528)
Fixes #157674 On ARM, the presence of a specific bf16 type in the AST is gated by: ``` bool ARMTargetInfo::hasBFloat16Type() const { // The __bf16 type is generally available so long as we have any fp registers. return HasBFloat16 || (FPU && !SoftFloat); } ``` And the target we use when evaluating symbols (derived from the program file, I think, haven't found it yet) does not enable any of this. This means that we fall back to __fp16. So for parts of the testing we just need to expect __fp16 instead, and others we need to skip because now a class looks like it inherits from itself. There's a proper fix here somewhere but I don't know what it is yet.
Diffstat (limited to 'lldb/test/API/lang')
-rw-r--r--lldb/test/API/lang/cpp/floating-types-specialization/TestCppFloatingTypesSpecialization.py22
-rw-r--r--lldb/test/API/lang/cpp/template-arguments/TestCppTemplateArguments.py9
2 files changed, 25 insertions, 6 deletions
diff --git a/lldb/test/API/lang/cpp/floating-types-specialization/TestCppFloatingTypesSpecialization.py b/lldb/test/API/lang/cpp/floating-types-specialization/TestCppFloatingTypesSpecialization.py
index 9564a0bc3180..f4530cd54504 100644
--- a/lldb/test/API/lang/cpp/floating-types-specialization/TestCppFloatingTypesSpecialization.py
+++ b/lldb/test/API/lang/cpp/floating-types-specialization/TestCppFloatingTypesSpecialization.py
@@ -1,4 +1,5 @@
import lldb
+import lldbsuite.test.lldbplatformutil as lldbplatformutil
from lldbsuite.test.decorators import *
from lldbsuite.test.lldbtest import *
from lldbsuite.test import lldbutil
@@ -11,12 +12,25 @@ class TestCase(TestBase):
self, "// break here", lldb.SBFileSpec("main.cpp", False)
)
- self.expect_expr("f0", result_type="Foo<__bf16>")
- self.expect_expr("f1", result_type="Foo<__fp16>")
+ # On 32-bit Arm, you have to have the bfloat16 extension, or an FPU while
+ # not using the soft float mode. The target we assume has none of that
+ # so instead of __bf16 we get __fp16.
+ is_arm_32_bit = lldbplatformutil.getArchitecture() == "arm"
+
+ self.expect_expr(
+ "f0", result_type=("Foo<__fp16>" if is_arm_32_bit else "Foo<__bf16>")
+ )
+
+ # When __bf16 is actually __fp16, f1 looks like it inherits from itself.
+ # Which clang allows but LLDB fails to evaluate.
+ if not is_arm_32_bit:
+ self.expect_expr("f1", result_type="Foo<__fp16>")
# Test sizeof to ensure while computing layout we don't do
# infinite recursion.
v = self.frame().EvaluateExpression("sizeof(f0)")
self.assertEqual(v.GetValueAsUnsigned() > 0, True)
- v = self.frame().EvaluateExpression("sizeof(f1)")
- self.assertEqual(v.GetValueAsUnsigned() > 0, True)
+
+ if not is_arm_32_bit:
+ v = self.frame().EvaluateExpression("sizeof(f1)")
+ self.assertEqual(v.GetValueAsUnsigned() > 0, True)
diff --git a/lldb/test/API/lang/cpp/template-arguments/TestCppTemplateArguments.py b/lldb/test/API/lang/cpp/template-arguments/TestCppTemplateArguments.py
index f26d382bf858..83c057220410 100644
--- a/lldb/test/API/lang/cpp/template-arguments/TestCppTemplateArguments.py
+++ b/lldb/test/API/lang/cpp/template-arguments/TestCppTemplateArguments.py
@@ -1,4 +1,5 @@
import lldb
+import lldbsuite.test.lldbplatformutil as lldbplatformutil
from lldbsuite.test.decorators import *
from lldbsuite.test.lldbtest import *
from lldbsuite.test import lldbutil
@@ -82,8 +83,12 @@ class TestCase(TestBase):
value = self.expect_expr("temp7", result_type="Foo<__fp16, __fp16>")
self.assertFalse(value.GetType().GetTemplateArgumentValue(target, 1))
- value = self.expect_expr("temp8", result_type="Foo<__bf16, __bf16>")
- self.assertFalse(value.GetType().GetTemplateArgumentValue(target, 1))
+ # The target we use when evaluating these expressions for Arm leads to there
+ # not being a __bf16 type in the AST so we fall back to __fp16 and evaluating
+ # this fails.
+ if lldbplatformutil.getArchitecture() != "arm":
+ value = self.expect_expr("temp8", result_type="Foo<__bf16, __bf16>")
+ self.assertFalse(value.GetType().GetTemplateArgumentValue(target, 1))
value = self.expect_expr("temp9", result_type="Bar<double, 1.200000e+00>")
template_param_value = value.GetType().GetTemplateArgumentValue(target, 1)