diff options
| author | aidanfnv <aidanf@nvidia.com> | 2025-07-23 18:42:24 -0700 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2025-07-24 01:42:24 +0000 |
| commit | 26b9a176e08ec6918d6fdebe1d7b586336f6f0fd (patch) | |
| tree | 5a625c1dd35754ba559d9d30fdbf3afcd1190f7d /tests/experiments | |
| parent | 9666fbcab891156fb058d6a1b8f427ccc3ffecab (diff) | |
Skip creating transitive witnesses for interface conformances that are inherited through structs (#7597)
* Eliminate null-pointer reference in multilevel struct interface inheritance
* Add test
* Replace witness nullptr guard with conformance check to skip the witness
* Update test
* Skip creating transitive witness entirely for struct-struct-interface
* format code (#14)
Co-authored-by: slangbot <186143334+slangbot@users.noreply.github.com>
* Removes casts, check for identity witness
---------
Co-authored-by: slangbot <ellieh+slangbot@nvidia.com>
Co-authored-by: slangbot <186143334+slangbot@users.noreply.github.com>
Diffstat (limited to 'tests/experiments')
| -rw-r--r-- | tests/experiments/generic/multilevel-inheritance.slang | 31 |
1 files changed, 31 insertions, 0 deletions
diff --git a/tests/experiments/generic/multilevel-inheritance.slang b/tests/experiments/generic/multilevel-inheritance.slang new file mode 100644 index 000000000..f3db67d70 --- /dev/null +++ b/tests/experiments/generic/multilevel-inheritance.slang @@ -0,0 +1,31 @@ +//TEST:SIMPLE(filecheck=CHECK): -target spirv -gnone -std 2026 +//TEST:SIMPLE(filecheck=CHECK): -target spirv -gminimal -std 2026 +//TEST:SIMPLE(filecheck=CHECK_LEGACY): -target spirv -gnone -std 2025 +//TEST:SIMPLE(filecheck=CHECK_LEGACY): -target spirv -gminimal -std 2025 +//TEST:SIMPLE(filecheck=CHECK_LEGACY): -target spirv -gnone -std legacy +//TEST:SIMPLE(filecheck=CHECK_LEGACY): -target spirv -gminimal -std legacy + +// CHECK: error 30811 +// CHECK: struct Child : Parent {}; +// CHECK: error 38029 +// CHECK: getObject<Child>(); + +// CHECK_LEGACY: warning 30816 +// CHECK_LEGACY: struct Child : Parent {}; +// CHECK_LEGACY: error 38029 +// CHECK_LEGACY: getObject<Child>(); + +interface IFoo {}; +struct Parent : IFoo {}; +struct Child : Parent {}; + +T getObject<T>() where T : IFoo +{ + return T(); +} + +[shader("compute")] +void main() +{ + getObject<Child>(); +} |
