summaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
Diffstat (limited to 'tests')
-rw-r--r--tests/bugs/keyword-undefined-identifier.slang35
-rw-r--r--tests/bugs/keyword-undefined-identifier.slang.expected7
2 files changed, 42 insertions, 0 deletions
diff --git a/tests/bugs/keyword-undefined-identifier.slang b/tests/bugs/keyword-undefined-identifier.slang
new file mode 100644
index 000000000..e1f46f517
--- /dev/null
+++ b/tests/bugs/keyword-undefined-identifier.slang
@@ -0,0 +1,35 @@
+// keyword-undeclared-identifier.slang
+
+//DIAGNOSTIC_TEST:SIMPLE:
+
+// Test that using a contextual keyword in
+// a context where it is an underfined
+// identifier produces a reasonable error
+// message instead of an internal compiler error
+//
+// Note that HLSL has keywords with very
+// common names like `triangle` and `sample`,
+// so it is easy for those to collide with
+// local variable names.
+//
+// Slang decides to make almost all keywords
+// contextual, so that they are looked up
+// in lexical scope and can be shadowed by
+// user-defined variables or functions.
+//
+// The problem in this case is that code
+// could easily be refactored so that it
+// uses one of the contextual keywrods in
+// a place where it is no longer shadowed,
+// but contextually needs to be treated
+// as an expression.
+
+int instanceTest()
+{
+ return instance;
+}
+
+int triangleTest()
+{
+ return triangle;
+}
diff --git a/tests/bugs/keyword-undefined-identifier.slang.expected b/tests/bugs/keyword-undefined-identifier.slang.expected
new file mode 100644
index 000000000..00c9fe8db
--- /dev/null
+++ b/tests/bugs/keyword-undefined-identifier.slang.expected
@@ -0,0 +1,7 @@
+result code = -1
+standard error = {
+tests/bugs/keyword-undefined-identifier.slang(29): error 30015: undefined identifier 'instance'.
+tests/bugs/keyword-undefined-identifier.slang(34): error 30015: undefined identifier 'triangle'.
+}
+standard output = {
+}