summaryrefslogtreecommitdiffstats
path: root/tests
diff options
context:
space:
mode:
authorYong He <yonghe@outlook.com>2024-07-25 09:45:56 -0700
committerGitHub <noreply@github.com>2024-07-25 09:45:56 -0700
commita443350a6bb344ccda46c35ebad5a7cf1a7b262d (patch)
treea873d13d084e3054e52ca40b586def5f49a01ac3 /tests
parent7ea47f9a7cb2a6dd8f9b1da909ed8a2e98216438 (diff)
Allow implicitly casting enum types to bool. (#4739)
* Allow implicitly casting enum types to bool. * Fix.
Diffstat (limited to 'tests')
-rw-r--r--tests/language-feature/enums/implicit-cast-to-bool.slang43
1 files changed, 43 insertions, 0 deletions
diff --git a/tests/language-feature/enums/implicit-cast-to-bool.slang b/tests/language-feature/enums/implicit-cast-to-bool.slang
new file mode 100644
index 000000000..566a5e305
--- /dev/null
+++ b/tests/language-feature/enums/implicit-cast-to-bool.slang
@@ -0,0 +1,43 @@
+// Test enums can be implicitly casted to bool.
+
+//TEST(compute):COMPARE_COMPUTE(filecheck-buffer=CHECK): -shaderobj
+
+[Flags]
+enum BitFlags
+{
+ One,
+ Two,
+ Three
+}
+
+int test<let n : bool>()
+{
+ return n;
+}
+
+//TEST_INPUT:ubuffer(data=[0 0 0 0], stride=4):out,name=outputBuffer
+RWStructuredBuffer<int> outputBuffer;
+
+[numthreads(4, 1, 1)]
+void computeMain(int3 dispatchThreadID : SV_DispatchThreadID)
+{
+ BitFlags x = BitFlags.One | BitFlags.Two;
+ if (x & BitFlags.One)
+ outputBuffer[0] = 1;
+ else
+ outputBuffer[0] = 0;
+ if (x & BitFlags.Three)
+ outputBuffer[1] = 1;
+ else
+ outputBuffer[1] = 0;
+ if (x & BitFlags.Two)
+ outputBuffer[2] = 1;
+ else
+ outputBuffer[2] = 0;
+
+ outputBuffer[3] = test<BitFlags.One & BitFlags.One>();
+ // CHECK: 1
+ // CHECK: 0
+ // CHECK: 1
+ // CHECK: 1
+}