From a6032446c6bf7f64d1e201bf438a4c7605a3dbb4 Mon Sep 17 00:00:00 2001 From: Yong He Date: Thu, 15 Sep 2022 14:22:59 -0700 Subject: Language feature: pointer sized int types. (#2401) * Language feature: pointer sized int types. * Fix. * small change to test. * Fix stdlib. * Fix. * Fix. * Add typedef for `size_t` in stdlib. * Fix test. * Add `intptr_t::size` constant. Co-authored-by: Yong He --- tests/diagnostics/bad-operator-call.slang.expected | 82 +++++++++++----------- tests/language-feature/types/intptr.slang | 37 ++++++++++ .../types/intptr.slang.expected.txt | 1 + 3 files changed, 80 insertions(+), 40 deletions(-) create mode 100644 tests/language-feature/types/intptr.slang create mode 100644 tests/language-feature/types/intptr.slang.expected.txt (limited to 'tests') diff --git a/tests/diagnostics/bad-operator-call.slang.expected b/tests/diagnostics/bad-operator-call.slang.expected index e7dc23739..14d1b858f 100644 --- a/tests/diagnostics/bad-operator-call.slang.expected +++ b/tests/diagnostics/bad-operator-call.slang.expected @@ -3,36 +3,38 @@ standard error = { tests/diagnostics/bad-operator-call.slang(18): error 39999: no overload for '+=' applicable to arguments of type (int, S) a += b; ^~ -core.meta.slang(1940): note 39999: candidate: __unsafeForceInlineEarly func +=(out matrix, T) -> matrix -core.meta.slang(1932): note 39999: candidate: __unsafeForceInlineEarly func +=(out matrix, matrix) -> matrix -core.meta.slang(1924): note 39999: candidate: __unsafeForceInlineEarly func +=(out vector, T) -> vector -core.meta.slang(1916): note 39999: candidate: __unsafeForceInlineEarly func +=(out vector, vector) -> vector -core.meta.slang(1908): note 39999: candidate: __unsafeForceInlineEarly func +=(out T, T) -> T +core.meta.slang(2219): note 39999: candidate: __unsafeForceInlineEarly func +=(out matrix, T) -> matrix +core.meta.slang(2211): note 39999: candidate: __unsafeForceInlineEarly func +=(out matrix, matrix) -> matrix +core.meta.slang(2203): note 39999: candidate: __unsafeForceInlineEarly func +=(out vector, T) -> vector +core.meta.slang(2195): note 39999: candidate: __unsafeForceInlineEarly func +=(out vector, vector) -> vector +core.meta.slang(2187): note 39999: candidate: __unsafeForceInlineEarly func +=(out T, T) -> T tests/diagnostics/bad-operator-call.slang(20): error 39999: no overload for '+' applicable to arguments of type (int, S) a = a + b; ^ -core.meta.slang(1746): note 39999: candidate: __intrinsic_op func +(uint64_t, uint64_t) -> uint64_t -core.meta.slang(1739): note 39999: candidate: __intrinsic_op func +(uint, uint) -> uint -core.meta.slang(1732): note 39999: candidate: __intrinsic_op func +(uint16_t, uint16_t) -> uint16_t -core.meta.slang(1725): note 39999: candidate: __intrinsic_op func +(uint8_t, uint8_t) -> uint8_t -core.meta.slang(1718): note 39999: candidate: __intrinsic_op func +(double, double) -> double -core.meta.slang(1711): note 39999: candidate: __intrinsic_op func +(float, float) -> float -core.meta.slang(1704): note 39999: candidate: __intrinsic_op func +(half, half) -> half -core.meta.slang(1697): note 39999: candidate: __intrinsic_op func +(int64_t, int64_t) -> int64_t -core.meta.slang(1690): note 39999: candidate: __intrinsic_op func +(int, int) -> int -core.meta.slang(1683): note 39999: candidate: __intrinsic_op func +(int16_t, int16_t) -> int16_t -tests/diagnostics/bad-operator-call.slang(20): note 39999: 1 more overload candidates +core.meta.slang(2045): note 39999: candidate: __intrinsic_op func +(uintptr_t, uintptr_t) -> uintptr_t +core.meta.slang(2037): note 39999: candidate: __intrinsic_op func +(uint64_t, uint64_t) -> uint64_t +core.meta.slang(2029): note 39999: candidate: __intrinsic_op func +(uint, uint) -> uint +core.meta.slang(2021): note 39999: candidate: __intrinsic_op func +(uint16_t, uint16_t) -> uint16_t +core.meta.slang(2013): note 39999: candidate: __intrinsic_op func +(uint8_t, uint8_t) -> uint8_t +core.meta.slang(2005): note 39999: candidate: __intrinsic_op func +(double, double) -> double +core.meta.slang(1997): note 39999: candidate: __intrinsic_op func +(float, float) -> float +core.meta.slang(1989): note 39999: candidate: __intrinsic_op func +(half, half) -> half +core.meta.slang(1981): note 39999: candidate: __intrinsic_op func +(intptr_t, intptr_t) -> intptr_t +core.meta.slang(1973): note 39999: candidate: __intrinsic_op func +(int64_t, int64_t) -> int64_t +tests/diagnostics/bad-operator-call.slang(20): note 39999: 3 more overload candidates tests/diagnostics/bad-operator-call.slang(22): error 39999: no overload for '~' applicable to arguments of type (S) a = ~b; ^ -core.meta.slang(1632): note 39999: candidate: __prefix __intrinsic_op func ~(uint64_t) -> uint64_t -core.meta.slang(1629): note 39999: candidate: __prefix __intrinsic_op func ~(uint) -> uint -core.meta.slang(1626): note 39999: candidate: __prefix __intrinsic_op func ~(uint16_t) -> uint16_t -core.meta.slang(1623): note 39999: candidate: __prefix __intrinsic_op func ~(uint8_t) -> uint8_t -core.meta.slang(1620): note 39999: candidate: __prefix __intrinsic_op func ~(int64_t) -> int64_t -core.meta.slang(1617): note 39999: candidate: __prefix __intrinsic_op func ~(int) -> int -core.meta.slang(1614): note 39999: candidate: __prefix __intrinsic_op func ~(int16_t) -> int16_t -core.meta.slang(1611): note 39999: candidate: __prefix __intrinsic_op func ~(int8_t) -> int8_t +core.meta.slang(1914): note 39999: candidate: __prefix __intrinsic_op func ~(uintptr_t) -> uintptr_t +core.meta.slang(1910): note 39999: candidate: __prefix __intrinsic_op func ~(uint64_t) -> uint64_t +core.meta.slang(1906): note 39999: candidate: __prefix __intrinsic_op func ~(uint) -> uint +core.meta.slang(1902): note 39999: candidate: __prefix __intrinsic_op func ~(uint16_t) -> uint16_t +core.meta.slang(1898): note 39999: candidate: __prefix __intrinsic_op func ~(uint8_t) -> uint8_t +core.meta.slang(1894): note 39999: candidate: __prefix __intrinsic_op func ~(intptr_t) -> intptr_t +core.meta.slang(1890): note 39999: candidate: __prefix __intrinsic_op func ~(int64_t) -> int64_t +core.meta.slang(1886): note 39999: candidate: __prefix __intrinsic_op func ~(int) -> int +core.meta.slang(1882): note 39999: candidate: __prefix __intrinsic_op func ~(int16_t) -> int16_t +core.meta.slang(1878): note 39999: candidate: __prefix __intrinsic_op func ~(int8_t) -> int8_t tests/diagnostics/bad-operator-call.slang(27): error 30047: argument passed to parameter '0' must be l-value. a += c; ^ @@ -40,25 +42,25 @@ tests/diagnostics/bad-operator-call.slang(27): note 30048: argument was implicit tests/diagnostics/bad-operator-call.slang(31): error 39999: no overload for '+=' applicable to arguments of type (vector, vector) d += c; ^~ -core.meta.slang(1940): note 39999: candidate: __unsafeForceInlineEarly func +=(out matrix, T) -> matrix -core.meta.slang(1932): note 39999: candidate: __unsafeForceInlineEarly func +=(out matrix, matrix) -> matrix -core.meta.slang(1924): note 39999: candidate: __unsafeForceInlineEarly func +=(out vector, T) -> vector -core.meta.slang(1916): note 39999: candidate: __unsafeForceInlineEarly func +=(out vector, vector) -> vector -core.meta.slang(1908): note 39999: candidate: __unsafeForceInlineEarly func +=(out T, T) -> T +core.meta.slang(2219): note 39999: candidate: __unsafeForceInlineEarly func +=(out matrix, T) -> matrix +core.meta.slang(2211): note 39999: candidate: __unsafeForceInlineEarly func +=(out matrix, matrix) -> matrix +core.meta.slang(2203): note 39999: candidate: __unsafeForceInlineEarly func +=(out vector, T) -> vector +core.meta.slang(2195): note 39999: candidate: __unsafeForceInlineEarly func +=(out vector, vector) -> vector +core.meta.slang(2187): note 39999: candidate: __unsafeForceInlineEarly func +=(out T, T) -> T tests/diagnostics/bad-operator-call.slang(33): error 39999: no overload for '+' applicable to arguments of type (vector, vector) d = c + d; ^ -core.meta.slang(1751): note 39999: candidate: __intrinsic_op func +<4>(vector, uint64_t) -> vector -core.meta.slang(1749): note 39999: candidate: __intrinsic_op func +<3>(uint64_t, vector) -> vector -core.meta.slang(1746): note 39999: candidate: __intrinsic_op func +(uint64_t, uint64_t) -> uint64_t -core.meta.slang(1744): note 39999: candidate: __intrinsic_op func +<4>(vector, uint) -> vector -core.meta.slang(1742): note 39999: candidate: __intrinsic_op func +<3>(uint, vector) -> vector -core.meta.slang(1739): note 39999: candidate: __intrinsic_op func +(uint, uint) -> uint -core.meta.slang(1737): note 39999: candidate: __intrinsic_op func +<4>(vector, uint16_t) -> vector -core.meta.slang(1735): note 39999: candidate: __intrinsic_op func +<3>(uint16_t, vector) -> vector -core.meta.slang(1732): note 39999: candidate: __intrinsic_op func +(uint16_t, uint16_t) -> uint16_t -core.meta.slang(1730): note 39999: candidate: __intrinsic_op func +<4>(vector, uint8_t) -> vector -tests/diagnostics/bad-operator-call.slang(33): note 39999: 23 more overload candidates +core.meta.slang(2051): note 39999: candidate: __intrinsic_op func +<4>(vector, uintptr_t) -> vector +core.meta.slang(2049): note 39999: candidate: __intrinsic_op func +<3>(uintptr_t, vector) -> vector +core.meta.slang(2045): note 39999: candidate: __intrinsic_op func +(uintptr_t, uintptr_t) -> uintptr_t +core.meta.slang(2043): note 39999: candidate: __intrinsic_op func +<4>(vector, uint64_t) -> vector +core.meta.slang(2041): note 39999: candidate: __intrinsic_op func +<3>(uint64_t, vector) -> vector +core.meta.slang(2037): note 39999: candidate: __intrinsic_op func +(uint64_t, uint64_t) -> uint64_t +core.meta.slang(2035): note 39999: candidate: __intrinsic_op func +<4>(vector, uint) -> vector +core.meta.slang(2033): note 39999: candidate: __intrinsic_op func +<3>(uint, vector) -> vector +core.meta.slang(2029): note 39999: candidate: __intrinsic_op func +(uint, uint) -> uint +core.meta.slang(2027): note 39999: candidate: __intrinsic_op func +<4>(vector, uint16_t) -> vector +tests/diagnostics/bad-operator-call.slang(33): note 39999: 29 more overload candidates } standard output = { } diff --git a/tests/language-feature/types/intptr.slang b/tests/language-feature/types/intptr.slang new file mode 100644 index 000000000..ea626adad --- /dev/null +++ b/tests/language-feature/types/intptr.slang @@ -0,0 +1,37 @@ +// intptr.slang + +// Test pointer-sized integer types. + +//TEST(compute):COMPARE_COMPUTE_EX:-slang -cpu -compute + +//TEST_INPUT:ubuffer(data=[0 0 0 0], stride=4):out,name=outputBuffer +RWStructuredBuffer outputBuffer; + +__target_intrinsic(cpp, "sizeof(intptr_t)") +intptr_t getNativeIntPtrSize(); + +__generic +__target_intrinsic(cpp, "sizeof($0)") +intptr_t getSizeOf(T val); + +intptr_t getIntPtrVal() { return 0z; } + +[numthreads(1, 1, 1)] +void computeMain(int3 dispatchThreadID: SV_DispatchThreadID) +{ + let expectedSize = getNativeIntPtrSize(); + intptr_t a = 0z; + var actualSize = getSizeOf(getIntPtrVal()); + int testResult = 1; + if (expectedSize != actualSize) + { + testResult = 0; + } + uintptr_t b = 0uz; + actualSize = getSizeOf(b); + if (expectedSize != actualSize) + { + testResult = 0; + } + outputBuffer[dispatchThreadID.x] = testResult; +} diff --git a/tests/language-feature/types/intptr.slang.expected.txt b/tests/language-feature/types/intptr.slang.expected.txt new file mode 100644 index 000000000..56a6051ca --- /dev/null +++ b/tests/language-feature/types/intptr.slang.expected.txt @@ -0,0 +1 @@ +1 \ No newline at end of file -- cgit v1.2.3