From 2ddd252db192ab4376994d34cb9be862f97b5449 Mon Sep 17 00:00:00 2001 From: Alexey Panteleev Date: Fri, 1 Apr 2022 10:56:02 -0700 Subject: Improved type printing (#2172) Improved the type printing function to include the generic substitutions and parent types. Added a test for it, mismatching-types.slang --- tests/diagnostics/mismatching-types.slang | 77 +++++++++++++++++++++++++++++++ 1 file changed, 77 insertions(+) create mode 100644 tests/diagnostics/mismatching-types.slang (limited to 'tests/diagnostics/mismatching-types.slang') diff --git a/tests/diagnostics/mismatching-types.slang b/tests/diagnostics/mismatching-types.slang new file mode 100644 index 000000000..15fc1d0e3 --- /dev/null +++ b/tests/diagnostics/mismatching-types.slang @@ -0,0 +1,77 @@ +// mismatching-types.slang +//DIAGNOSTIC_TEST:SIMPLE:-target hlsl + +Texture1D tex; + +struct GenericOuter +{ + struct GenericInner + { + T val; + }; + + struct NonGenericInner + { + T val; + }; + + GenericInner g; + NonGenericInner ng; +}; + +struct NonGenericOuter +{ + struct GenericInner + { + T val; + + struct ReallyNested + { + T val; + }; + + ReallyNested n; + }; + + GenericInner i; + GenericInner f; +}; + + +[shader("compute")] +[numthreads(1, 1, 1)] +void main(uint3 dispatchThreadID : SV_DispatchThreadID) +{ + GenericOuter a; + GenericOuter b; + NonGenericOuter c; + NonGenericOuter.GenericInner d; + + // expected an expression of type 'GenericOuter', got 'int' + a = 0; + // expected an expression of type 'GenericOuter.GenericInner', got 'int' + a.g = 0; + // expected an expression of type 'GenericOuter.NonGenericInner', got 'int' + a.ng = 0; + // expected an expression of type 'GenericOuter.GenericInner', got 'GenericOuter.GenericInner' + a.g = b.g; + // expected an expression of type 'GenericOuter.NonGenericInner', got 'GenericOuter.NonGenericInner' + a.ng = b.ng; + // expected an expression of type 'NonGenericOuter.GenericInner', got 'int' + c.i = 0; + // expected an expression of type 'NonGenericOuter.GenericInner', got 'NonGenericOuter.GenericInner' + c.i = c.f; + // expected an expression of type 'NonGenericOuter.GenericInner.ReallyNested', got 'int' + c.i.n = 0; + // OK + c.i.n.val = 0; + // OK + d.val = 0; + // OK + c.i = d; + + // expected an expression of type 'Texture1D', got 'Texture1D' + Texture1D t1 = tex; + // expected an expression of type 'Texture2D', got 'Texture1D' + Texture2D t2 = tex; +} \ No newline at end of file -- cgit v1.2.3