Files
TheRock/compiler/amd-llvm/lldb/test/API/lang/c/calling-conventions/TestCCallingConventions.py
T
derek.holloway 7502bf64a4
CodeQL / Analyze (actions) (push) Canceled after 0s
CodeQL / Analyze (python) (push) Canceled after 0s
pre-commit / pre-commit (push) Canceled after 0s
Multi-Arch CI / setup (push) Canceled after 0s
Publish build_manylinux_x86_64 images / publish_build_manylinux_x86_64 (push) Canceled after 0s
Setup (Multi-Arch) / setup (push) Canceled after 0s
Multi-Arch CI / Linux::${{ fromJSON(needs.setup.outputs.linux_build_config || '{}').build_variant_label || 'skip' }} (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Publish no_rocm_image_ubi10 image / publish_no_rocm_image_ubi10 (push) Canceled after 0s
Multi-Arch CI / Windows::${{ fromJSON(needs.setup.outputs.windows_build_config || '{}').build_variant_label || 'skip' }} (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Multi-Arch CI / Manifest Diff (push) Canceled after 0s
TheRock Manifest Diff Report / Generate Manifest Diff Report (push) Canceled after 0s
Multi-Arch CI / CI Summary (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04 (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04_ocl_rt images / publish_no_rocm_image_ubuntu24_04_ocl_rt (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_rocgdb (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04_rocgdb images / publish_no_rocm_image_ubuntu24_04_rocgdb (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_ocl_rt (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Unit Tests / Unit Tests :: ubuntu-24.04 (push) Canceled after 0s
Unit Tests / Unit Tests :: windows-2022 (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_media (push) Canceled after 0s
Unit Tests / Unit Tests Summary (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_openmpi (push) Canceled after 0s
Flatten subprojects into a single base monorepo
2026-09-02 16:34:47 -07:00

94 lines
3.6 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
SHARED_BUILD_TESTCASE = False
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=["<", "17.0"], archs=["arm64"])
@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")
# Fails on x86, passes elsewhere because clang doesn't support vectorcall on
# any other architectures.
@expectedFailureAll(
triple=re.compile("^(x86|i386)"),
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")