summaryrefslogtreecommitdiffstats
path: root/tests/language-feature
diff options
context:
space:
mode:
authorYong He <yonghe@outlook.com>2025-07-10 21:14:16 -0700
committerGitHub <noreply@github.com>2025-07-11 04:14:16 +0000
commit90c34e3db4fdc7be79c62bd91905a2a84bbd673e (patch)
treea8ccf3c2dbfe5f1faa646bf91e41d9a12a66c804 /tests/language-feature
parent7764b83d24d341334ca7c1693cae2472be8f8d99 (diff)
Ensure generic constraints are checked before inner extension. (#7685)
* Ensure generic constraints are checked before inner extension. * Add warning for non-standard generic extension. * Fix tests. * Fix test. * Ban interface types from equality constraints. * Fix.
Diffstat (limited to 'tests/language-feature')
-rw-r--r--tests/language-feature/extensions/generic-extension-2.slang2
-rw-r--r--tests/language-feature/extensions/generic-extension-5.slang52
-rw-r--r--tests/language-feature/overloaded-subscript.slang1
3 files changed, 55 insertions, 0 deletions
diff --git a/tests/language-feature/extensions/generic-extension-2.slang b/tests/language-feature/extensions/generic-extension-2.slang
index 2728a73d6..d56455e3d 100644
--- a/tests/language-feature/extensions/generic-extension-2.slang
+++ b/tests/language-feature/extensions/generic-extension-2.slang
@@ -1,4 +1,6 @@
//TEST(compute):COMPARE_COMPUTE(filecheck-buffer=CHECK): -shaderobj
+
+#pragma warning(disable:30856)
interface IFoo<T>
{
T getFirst();
diff --git a/tests/language-feature/extensions/generic-extension-5.slang b/tests/language-feature/extensions/generic-extension-5.slang
new file mode 100644
index 000000000..e6466d614
--- /dev/null
+++ b/tests/language-feature/extensions/generic-extension-5.slang
@@ -0,0 +1,52 @@
+//TEST:INTERPRET(filecheck=CHECK):
+interface IGen<A>
+{
+ associatedtype TB;
+ TB getVal();
+}
+
+struct Foo1<A> : IGen<A>
+{
+ typealias TB = int;
+ int val = 0;
+ TB getVal()
+ {
+ return val;
+ }
+}
+
+struct Foo2<A> : IGen<A>
+{
+ typealias TB = int;
+ int val = 0;
+ TB getVal()
+ {
+ return val;
+ }
+}
+
+struct Logic<A1, C1 : IGen<A1>, C2 : IGen<A1>>
+{
+ int val = 0;
+}
+
+extension<A, C1, C2> Logic<A, C1, C2>
+ where C1 : IGen<A>
+ where C2 : IGen<A>
+ where C1.TB == C2.TB
+{
+ [mutating]
+ void setVal(int dataIn)
+ {
+ val = dataIn;
+ }
+}
+
+void main()
+{
+ Logic<int, Foo1<int>, Foo2<int>> logic;
+ logic.setVal(42);
+ int result = logic.val;
+ printf("Result: %d\n", result);
+ // CHECK: Result: 42
+} \ No newline at end of file
diff --git a/tests/language-feature/overloaded-subscript.slang b/tests/language-feature/overloaded-subscript.slang
index 68ad1111a..e928e97ec 100644
--- a/tests/language-feature/overloaded-subscript.slang
+++ b/tests/language-feature/overloaded-subscript.slang
@@ -13,6 +13,7 @@ interface IRWBuf<T> : IBuf<T>
void write(int x, T v);
}
+#pragma warning(disable:30856)
extension<T, U : IBuf<T>> U
{
__subscript(int x) -> T { get { return read(x); } }