This test was disabled because clang struggled to emit a Windows calling convention when targeting an Apple environment. This test is now showing up as an XPASS so someone must have fixed this.
84 lines
3.3 KiB
Python
84 lines
3.3 KiB
Python
import lldb
|
|
from lldbsuite.test.decorators import *
|
|
from lldbsuite.test.lldbtest import *
|
|
from lldbsuite.test import lldbutil
|
|
from lldbsuite.test_event.build_exception import BuildError
|
|
|
|
class TestCase(TestBase):
|
|
|
|
NO_DEBUG_INFO_TESTCASE = True
|
|
|
|
def build_and_run(self, test_file):
|
|
"""
|
|
Tries building the given test source and runs to the first breakpoint.
|
|
Returns false if the file fails to build due to an unsupported calling
|
|
convention on the current test target. Returns true if building and
|
|
running to the breakpoint succeeded.
|
|
"""
|
|
try:
|
|
self.build(dictionary={
|
|
"C_SOURCES" : test_file,
|
|
"CFLAGS_EXTRAS" : "-Werror=ignored-attributes"
|
|
})
|
|
except BuildError as e:
|
|
# Test source failed to build. Check if it failed because the
|
|
# calling convention argument is unsupported/unknown in which case
|
|
# the test should be skipped.
|
|
error_msg = str(e)
|
|
# Clang gives an explicit error when a calling convention is
|
|
# not supported.
|
|
if "calling convention is not supported for this target" in error_msg:
|
|
return False
|
|
# GCC's has two different generic warnings it can emit.
|
|
if "attribute ignored" in error_msg:
|
|
return False
|
|
if "attribute directive ignored " in error_msg:
|
|
return False
|
|
# We got a different build error, so raise it again to fail the
|
|
# test.
|
|
raise
|
|
lldbutil.run_to_source_breakpoint(self, "// break here", lldb.SBFileSpec(test_file))
|
|
return True
|
|
|
|
@skipIf(compiler="clang", compiler_version=['<', '9.0'])
|
|
def test_regcall(self):
|
|
if not self.build_and_run("regcall.c"):
|
|
return
|
|
self.expect_expr("func(1, 2, 3, 4)", result_type="int", result_value="10")
|
|
|
|
@skipIf(compiler="clang", compiler_version=['<', '9.0'])
|
|
def test_ms_abi(self):
|
|
if not self.build_and_run("ms_abi.c"):
|
|
return
|
|
self.expect_expr("func(1, 2, 3, 4)", result_type="int", result_value="10")
|
|
|
|
@skipIf(compiler="clang", compiler_version=['<', '9.0'])
|
|
def test_stdcall(self):
|
|
if not self.build_and_run("stdcall.c"):
|
|
return
|
|
self.expect_expr("func(1, 2, 3, 4)", result_type="int", result_value="10")
|
|
|
|
@expectedFailureAll(oslist=["freebsd"],
|
|
bugnumber="github.com/llvm/llvm-project/issues/56084")
|
|
def test_vectorcall(self):
|
|
if not self.build_and_run("vectorcall.c"):
|
|
return
|
|
self.expect_expr("func(1.0)", result_type="int", result_value="1")
|
|
|
|
@skipIf(compiler="clang", compiler_version=['<', '9.0'])
|
|
def test_fastcall(self):
|
|
if not self.build_and_run("fastcall.c"):
|
|
return
|
|
self.expect_expr("func(1, 2, 3, 4)", result_type="int", result_value="10")
|
|
|
|
@skipIf(compiler="clang", compiler_version=['<', '9.0'])
|
|
def test_pascal(self):
|
|
if not self.build_and_run("pascal.c"):
|
|
return
|
|
self.expect_expr("func(1, 2, 3, 4)", result_type="int", result_value="10")
|
|
|
|
def test_sysv_abi(self):
|
|
if not self.build_and_run("sysv_abi.c"):
|
|
return
|
|
self.expect_expr("func(1, 2, 3, 4)", result_type="int", result_value="10")
|