2 from lldbsuite
.test
.decorators
import *
3 from lldbsuite
.test
.lldbtest
import *
4 from lldbsuite
.test
import lldbutil
5 from lldbsuite
.test_event
.build_exception
import BuildError
8 class TestCase(TestBase
):
9 NO_DEBUG_INFO_TESTCASE
= True
11 def build_and_run(self
, test_file
):
13 Tries building the given test source and runs to the first breakpoint.
14 Returns false if the file fails to build due to an unsupported calling
15 convention on the current test target. Returns true if building and
16 running to the breakpoint succeeded.
21 "C_SOURCES": test_file
,
22 "CFLAGS_EXTRAS": "-Werror=ignored-attributes",
25 except BuildError
as e
:
26 # Test source failed to build. Check if it failed because the
27 # calling convention argument is unsupported/unknown in which case
28 # the test should be skipped.
30 # Clang gives an explicit error when a calling convention is
32 if "calling convention is not supported for this target" in error_msg
:
34 # GCC's has two different generic warnings it can emit.
35 if "attribute ignored" in error_msg
:
37 if "attribute directive ignored " in error_msg
:
39 # We got a different build error, so raise it again to fail the
42 lldbutil
.run_to_source_breakpoint(
43 self
, "// break here", lldb
.SBFileSpec(test_file
)
47 @skipIf(compiler
="clang", compiler_version
=["<", "9.0"])
48 def test_regcall(self
):
49 if not self
.build_and_run("regcall.c"):
51 self
.expect_expr("func(1, 2, 3, 4)", result_type
="int", result_value
="10")
53 @skipIf(compiler
="clang", compiler_version
=["<", "9.0"])
54 def test_ms_abi(self
):
55 if not self
.build_and_run("ms_abi.c"):
57 self
.expect_expr("func(1, 2, 3, 4)", result_type
="int", result_value
="10")
59 @skipIf(compiler
="clang", compiler_version
=["<", "9.0"])
60 def test_stdcall(self
):
61 if not self
.build_and_run("stdcall.c"):
63 self
.expect_expr("func(1, 2, 3, 4)", result_type
="int", result_value
="10")
65 # Fails on x86, passes elsewhere because clang doesn't support vectorcall on
66 # any other architectures.
68 triple
=re
.compile("^(x86|i386)"),
69 oslist
=["freebsd"], bugnumber
="github.com/llvm/llvm-project/issues/56084"
71 def test_vectorcall(self
):
72 if not self
.build_and_run("vectorcall.c"):
74 self
.expect_expr("func(1.0)", result_type
="int", result_value
="1")
76 @skipIf(compiler
="clang", compiler_version
=["<", "9.0"])
77 def test_fastcall(self
):
78 if not self
.build_and_run("fastcall.c"):
80 self
.expect_expr("func(1, 2, 3, 4)", result_type
="int", result_value
="10")
82 @skipIf(compiler
="clang", compiler_version
=["<", "9.0"])
83 def test_pascal(self
):
84 if not self
.build_and_run("pascal.c"):
86 self
.expect_expr("func(1, 2, 3, 4)", result_type
="int", result_value
="10")
88 def test_sysv_abi(self
):
89 if not self
.build_and_run("sysv_abi.c"):
91 self
.expect_expr("func(1, 2, 3, 4)", result_type
="int", result_value
="10")