summaryrefslogtreecommitdiff
path: root/tests/diagnostics/interfaces
diff options
context:
space:
mode:
Diffstat (limited to 'tests/diagnostics/interfaces')
-rw-r--r--tests/diagnostics/interfaces/mutating-impl-of-non-mutating-req.slang42
-rw-r--r--tests/diagnostics/interfaces/mutating-impl-of-non-mutating-req.slang.expected6
2 files changed, 48 insertions, 0 deletions
diff --git a/tests/diagnostics/interfaces/mutating-impl-of-non-mutating-req.slang b/tests/diagnostics/interfaces/mutating-impl-of-non-mutating-req.slang
new file mode 100644
index 000000000..2dbe45ccb
--- /dev/null
+++ b/tests/diagnostics/interfaces/mutating-impl-of-non-mutating-req.slang
@@ -0,0 +1,42 @@
+// mutating-impl-of-non-mutating-req.slang
+
+//DIAGNOSTIC_TEST:SIMPLE:-target hlsl -entry main
+
+interface IThing
+{
+ int processValue(int inValue);
+}
+
+struct Counter : IThing
+{
+ int state;
+
+ [mutating] int processValue(int inValue)
+ {
+ int result = state;
+ state += inValue;
+ return state;
+ }
+}
+
+int helper<T : IThing>(T thing, int value)
+{
+ return thing.processValue(value);
+}
+
+int test(int value)
+{
+ Counter counter = { value };
+ return helper(counter, value);
+}
+
+cbuffer C
+{
+ int gValue;
+}
+
+[shader("fragment")]
+int main() : SV_Target
+{
+ return test(gValue);
+} \ No newline at end of file
diff --git a/tests/diagnostics/interfaces/mutating-impl-of-non-mutating-req.slang.expected b/tests/diagnostics/interfaces/mutating-impl-of-non-mutating-req.slang.expected
new file mode 100644
index 000000000..922a6c826
--- /dev/null
+++ b/tests/diagnostics/interfaces/mutating-impl-of-non-mutating-req.slang.expected
@@ -0,0 +1,6 @@
+result code = -1
+standard error = {
+tests/diagnostics/interfaces/mutating-impl-of-non-mutating-req.slang(10): error 38100: type 'Counter' does not provide required interface member 'processValue'
+}
+standard output = {
+}