// 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; }